根据文档,将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_STANDARD
和CXX_STANDARD_REQUIRED
,只是“非正式地”需要最低版本的C ++ ......
答案 0 :(得分:0)
不,没有办法轻易做到这一点。虽然您可以扩展CMake以持续编译特定标准的对象(或向下),但这需要花费很多精力。根据您的具体情况,有可能做您想做的事情。
使用非冲突的宏。使用您的示例,请使用#define MYCONSTEXPR ...
代替#define constexpr ...
根据标准使用较大的条件块
您的项目主要是一个标准,但是有一些文件需要不同的文件吗?使用CMake的set_source_files_properties()
设置新的CXX_STANDARD
或COMPILE_FLAGS
。