CMAKE 如何在 C++ 中将编译器标志附加到末尾

cmake how to append compiler flags to the end in C++

本文关键字:标志 编译器 C++ CMAKE      更新时间:2023-10-16

我想将编译器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 以来一直存在。