CMAKE 如何在 C++ 中将编译器标志附加到末尾
cmake how to append compiler flags to the end in C++
我想将编译器C++标准设置为 gnu++17,但我不能用CMAKE_CXX_STANDARD
做到这一点,因为它给了我gnu++17
是无效值。因此,我把它放在CMAKE_CXX_FLAGS
. 但是当我编译 cmake 时,std=gnu++11
附加到命令的末尾,如下所示:-
/bin/g++ -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie -fPIC -std=gnu++11 -o /path/to/main.cpp.o -c /blah/blahfeeelk
因此std=gnu++11
赢了.所以想把gnu++17
附加到最后. 我该怎么做? (我已经修剪了原始命令(
CMake 有三个变量来控制 C++ 标准的版本和打开/关闭编译器扩展。我在这里显示目标特定版本,因为这就是它在相当现代 (v3.x( CMake 中的使用方式。
add_executable(foo main.cpp)
set_target_properties(foo PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS ON
)
这将启用 C++17,防止在 17 不可用时自动回退到早期标准,并启用编译器扩展。对于 GCC,这相当于-std=gnu++17
或-std=gnu++1z
。
具有17
值的CXX_STANDARD从 CMake 3.8 开始可用。CXX_STANDARD_REQUIRED和CXX_EXTENSIONS自 CMake 3.1 以来一直存在。
相关文章:
- 在 CMake 中为每个目标设置编译器/链接器标志
- Visual Studio 中是否有来自代码块的编译器标志的类似物?
- 如何将编译器标志限制为仅(我的)本地库?
- 为什么 gcc 编译器标志未知?
- 如何将编译器标志从 clang 传递给 nvcc
- 设置用于调试的 g++ 编译器标志
- 如何在 cmake 中设置编译器特定的标志
- 是否有任何编译器标志可以在下面的代码中用于报告有关 UB 的警告?
- std::function, Clang 6.0 & MSVC (10.0017134.12) - 可能的 ABI 错误或必需的编译器标志
- 是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?
- CMAKE 如何在 C++ 中将编译器标志附加到末尾
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- 如何在 Visual Studio Code 中包含编译器标志
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- 使用 noexcept 和编译器标志来关闭异常
- 运行时附加编译器标志
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- 不能在 Solaris 的最新编译器中使用带有新 c+11 标志的 xercesc
- 在每个平台上使用相同的模拟,具有正确的编译器标志
- 如何在 CMake 中添加"-l" (ell) 编译器标志