cmake add_library с минимальным стандартом cpp - PullRequest
0 голосов
/ 24 января 2019

библиотека нуждается как минимум в cpp14, но если доступен cpp17, она открывает больше возможностей.Я попробовал следующее.

cmake_minimum_required(VERSION 3.10)
project(dummy)

add_library(awesomelib STATIC awesomelib.cpp awesomelib.h)
target_compile_features(awesomelib INTERFACE cxx_std_14)

add_executable(dummy14 main.cpp)
target_link_libraries(dummy14 awesomelib)
target_compile_features(dummy14 PRIVATE cxx_std_14)

add_executable(dummy17 main.cpp)
target_link_libraries(dummy17 awesomelib)
target_compile_features(dummy17 PRIVATE cxx_std_17)

Что я хочу:

  1. dummy14 для компиляции с использованием стандарта C ++ 14
  2. dummy17 и awesomelib для компиляции с использованиемстандарт C ++ 17

Но происходит то, что awesomelib компилируется (только один раз) в соответствии со стандартом c ++ 14.


Обновление

Я показал исполняемые файлы в одном файле для простоты.В реальной установке библиотека будет находиться в отдельном проекте / хранилище, а пользователи будут в другом проекте.Я ищу, как библиотека может рекламировать свои минимальные требования.т. е. для него требуется как минимум стандарт c ++ 14 и, в зависимости от пользователя, он должен быть скомпилирован с любой последней версией, которую имеет пользователь.

1 Ответ

0 голосов
/ 24 января 2019

Я добавил несколько изменений в ваш файл CMkaeLists.txt, и теперь он работает

cmake_minimum_required(VERSION 3.10)
project(dummy)
set (CMAKE_CXX_STANDARD 17)

add_library(awesomelib STATIC awesomelib.cpp awesomelib.h)
target_compile_features(awesomelib INTERFACE)

add_executable(dummy17 main.cpp)
target_link_libraries(dummy17 awesomelib)
target_compile_features(dummy17 PRIVATE cxx_std_17)

set (CMAKE_CXX_STANDARD 14)
add_executable(dummy14 main.cpp)
target_link_libraries(dummy14 awesomelib)
target_compile_features(dummy14 PRIVATE cxx_std_14)

enter image description here enter image description here enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...