Cmake - select 不同来源的不同 C++ 标准

Cmake - select different c++ standard for different sources

如标题所示,我想使用 cmake 构建一个项目,并根据源文件执行不同的 c++ 标准。

原因是:我正在开发一个库并希望使其兼容 c++03 以实现兼容性,但想使用需要 c++11 的 Google 测试套件。

所以单元测试将使用 c++11 编译,但如果引用了仅 c++11 的功能,我希望我的库在编译时失败。

如果它们被不同的目标使用,您可以这样做,使用 add_targrt_compile_options ,如下所示。

假设您希望将 c++03 与 lib 一起使用,而 c++11 与 exec 一起使用,您可以使用类似下面的内容

add_executable(exec1 main.cpp)
add_library(lib1 STATIC lib1.cpp)
target_compile_options(lib1 PRIVATE -std=c++03)
target_compile_options(exec1 PRIVATE  -std=c++11)

所以就这样做吧——用一个标准编译你的库,用另一个标准编译你的测试。如今, 方法应该是首选。

add_library(mylib lib1.cpp)
set_target_properties(mylib
    PROPERTIES
    CXX_STANDARD 03
    CXX_EXTENSIONS off
    )

add_executable(mytest main.cpp)
set_target_properties(mytest
    PROPERTIES
    CXX_STANDARD 11
    CXX_EXTENSIONS off
    )
target_link_libraries(mytest PRIVATE mylib)
add_test(NAME mytest COMMAND mytest)