C++ 具有最低cpp标准的cmake add_库

C++ 具有最低cpp标准的cmake add_库,c++,cmake,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_

库至少需要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)
我想要的是:

  • 使用C++14标准编译dummy14
  • 使用C++17标准编译dummy17和awesomelib
  • 但实际情况是,根据c++14标准编译awesomelib(只编译一次)


    更新


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

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