在跨平台 CMake 项目中设置编译器标志的现代方法
使用 CMake 生成器表达式的优雅解决方案
虽然您的方法有效,但现代 CMake 使用 CMake 的生成器表达式提供了更简洁、更强大的解决方案:
cmake_minimum_required(VERSION 3.8) project(HelloWorld) string( APPEND _opts "$<IF:$<CXX_COMPILER_ID:MSVC>," "/W4;$<$<CONFIG:RELEASE>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:RELEASE>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) add_compile_options("${_opts}")
与您原来的方法相比,此方法利用:
弃用手动标志设置
正如您所注意到的,通常不鼓励手动设置 CMAKE_CXX_FLAGS 和类似变量。相反,更喜欢使用 add_compile_options() 函数来附加选项,而不修改全局标志。
多目标项目设置
在在同一目录下,您可以使用 CMake 的目标属性:
add_executable(HelloWorld_Debug_Clang HelloWorld.cpp) target_compile_options(HelloWorld_Debug_Clang PRIVATE "-std=c++1z;-W4") target_link_libraries(HelloWorld_Debug_Clang PRIVATE libc++) add_executable(HelloWorld_Release_Gcc HelloWorld.cpp) target_compile_options(HelloWorld_Release_Gcc PRIVATE "-std=c++1z;-W3") target_link_libraries(HelloWorld_Release_Gcc PRIVATE libstdc++)
这种方法允许您为每个目标指定不同的编译器选项,同时保留单个项目文件。
现代最佳实践
以上是如何使用生成器表达式在跨平台 CMake 项目中设置编译器标志?的详细内容。更多信息请关注PHP中文网其他相关文章!