我在使用CMake构建项目时遇到了关于设置C++标准的一些问题。代码需要大量使用C++11特性,因此到目前为止,我一直这样做:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
最近GCC版本默认使用C++14,因此我需要链接与C++14构建的库才能满足公共要求,但在尝试使用严格的C++11进行构建时会发生冲突。
因此,目标是要求至少使用C++11标准,但如果默认编译器版本更高,则使用它。
我已经尝试过:
target_compile_features(myLib PUBLIC cxx_std_11)
但是CMake最终会添加-std=c++11
标志,这很令人困惑,因为文档明确表示:
CMake将确保以了解C++ 11(或更高版本)的模式调用编译器,必要时添加标志,如-std=gnu++11。
我也尝试使用CMAKE_CXX_STANDARD_COMPUTED_DEFAULT
内部变量,但由于"98"
大于"11"
,所以这很麻烦。
当然,可以使用该变量或使用check_cxx_compiler_flag()
函数,并测试不同的情况来使其正常工作,但在新标准每三年出现一次的今天,希望有一种更简单的方法来实现这一点...