代码之家  ›  专栏  ›  技术社区  ›  balki

具有最低CPP标准的CMAKE ADD U库

  •  1
  • balki  · 技术社区  · 6 年前

    库至少需要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. 使用C++ 14标准编译
    2. DUMY17和AWESOMILB使用C++ 17标准编译

    但是发生的是AWESOMILB是根据C++ 14 STD编译的(只有一次)。


    更新

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Damian    6 年前

    我在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