最低cpp标准的cmake add_library

时间:2019-01-24 03:34:48

标签: c++ cmake

库至少需要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 std编译了(只有一次)。


更新

为简单起见,我在同一文件中显示了可执行文件。在实际设置中,库将位于单独的项目/存储库中,而用户将位于不同的项目中。我正在寻找图书馆如何宣传其最低要求。也就是说,它至少需要c ++ 14标准,并且必须根据用户的不同,使用用户拥有的最新版本进行编译。

1 个答案:

答案 0 :(得分:1)

我对您的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