Cmake - 为不同的源选择不同的c++标准

问题描述 投票:0回答:2

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

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

因此单元测试将使用 c++11 进行编译,但如果引用仅限 c++11 的功能,我希望我的库在编译时失败。

c++ cmake
2个回答
3
投票

所以就这样做 - 用一个标准编译你的库,用另一个标准编译你的测试。如今,https://stackoverflow.com/a/61281312/9072753方法应该是首选。

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)

1
投票

如果它们被不同的目标使用,您可以使用 target_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)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.