指定所需的最低C ++标准

时间:2017-03-29 21:56:33

标签: cmake

根据文档,将CXX_STANDARD_REQUIRED设置为ON会禁止构建系统使用旧的C ++标准,而不是CXX_STANDARD请求的标准。

但是当与WriteCompilerDetectionHeader模块结合使用时,这会导致“有趣”的问题。例如在提供某种形式的“向前兼容性”时:

set(CMAKE_CXX_STANDARD 11)并测试cxx_relaxed_constexpr,然后有条件地定义扩展为constexpr的宏会导致GCC 6.3.0上的编译错误,因为CXX_STANDARD的要求和宏的使用是冲突的(使用编译器的实际特征集的特征头,而不是编译器在需要C ++ 11时提供的特征头)。

有没有办法指定所需的最低C ++标准,而不禁止更新的标准(例如C ++ 11或更高版本)?我目前唯一可以考虑的解决方法是不设置CXX_STANDARDCXX_STANDARD_REQUIRED,只是“非正式地”需要最低版本的C ++ ......

1 个答案:

答案 0 :(得分:0)

不,没有办法轻易做到这一点。虽然您可以扩展CMake以持续编译特定标准的对象(或向下),但这需要花费很多精力。根据您的具体情况,有可能做您想做的事情。

  • 使用非冲突的宏。使用您的示例,请使用#define MYCONSTEXPR ...代替#define constexpr ...

  • 根据标准使用较大的条件块

  • 您的项目主要是一个标准,但是有一些文件需要不同的文件吗?使用CMake的set_source_files_properties()设置新的CXX_STANDARDCOMPILE_FLAGS