我在为使用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
标记,这会让人感到困惑,因为documentation明确表示
CMake将确保在知道C ++ 11(或更高版本)的模式下调用编译器,并在必要时添加-std = gnu ++ 11等标志
我也尝试使用CMAKE_CXX_STANDARD_COMPUTED_DEFAULT
内部变量,但这很麻烦,因为"98"
大于"11"
。
当然可以让它使用该变量或使用check_cxx_compiler_flag()
函数并测试不同的情况,但我希望有一种更简单的方法可以在一天中实现这一点新标准每三年到达一次......