cmake 如何在 C++ 中将编译器标志附加到末尾
cmake how to append compiler flags to the end in C++
我想将编译器 C++ 标准设置为 gnu++17 但我不能用 CMAKE_CXX_STANDARD
这样做,因为它给我 gnu++17
是无效的 value.Thus 我把它放在 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++ 标准的版本和切换编译器扩展 on/off。我在这里展示了目标特定版本,因为这是在相当现代的 (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
.
CXX_STANDARD with the 17
value is available since CMake 3.8. CXX_STANDARD_REQUIRED and CXX_EXTENSIONS 自 CMake 3.1 以来存在。
我想将编译器 C++ 标准设置为 gnu++17 但我不能用 CMAKE_CXX_STANDARD
这样做,因为它给我 gnu++17
是无效的 value.Thus 我把它放在 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++ 标准的版本和切换编译器扩展 on/off。我在这里展示了目标特定版本,因为这是在相当现代的 (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
.
CXX_STANDARD with the 17
value is available since CMake 3.8. CXX_STANDARD_REQUIRED and CXX_EXTENSIONS 自 CMake 3.1 以来存在。