正如标题所示,我想使用 cmake 构建一个项目,并根据源文件,强制执行不同的 C++ 标准。
原因是:我正在开发一个库,希望使其兼容 c++03 以实现兼容性,但想使用需要 c++11 的 Google 测试套件。
因此单元测试将使用 c++11 进行编译,但如果引用仅限 c++11 的功能,我希望我的库在编译时失败。
所以就这样做 - 用一个标准编译你的库,用另一个标准编译你的测试。如今,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)
如果它们被不同的目标使用,您可以使用 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)