【发布时间】:2019-01-16 09:09:01
【问题描述】:
(这个问题实际上是关于“或以后”的部分。)
我知道其他答案告诉我们在 cmake 中的目标/项目上激活 C++11。
我的问题实际上是我们如何表达 C++11 或更高版本。
从 CMake 3.8 开始,我们有 cxx_std_11- 功能,它在编译器 (-std=c++11) 上强制使用 C++11,它甚至支持更高的标准,甚至可能默认为 C++14 (gcc-7) 甚至 17 (gcc-8, iiuc)。
还有 CXX_STANDARD-target-property,但这不是传递性的,并且还强制使用确切的标准,而不是“或更高”的选项。
到目前为止,我发现的唯一方法是要求 cxx_range_for(或类似功能),如果至少支持 C++11,CMake 会保持编译器的默认 C++ 标准。从 CMake 3.1 开始支持此功能。
选择 C++11 或更高版本的 CMake 目标的正确方法是什么?
【问题讨论】:
-
使用不同的标准构建项目的不同部分并不是一个好主意。
-
如果你的源代码是 C++11,你为什么要使用更高版本的标准来编译它?请注意,较新的标准并非 100% 向后兼容。
-
对于仅标头库,如果它也适用于更高版本,您可能不想强制依赖者使用 C++11。这是我的用例。