本文提供了有关在跨平台 CMake 中设置编译器标志的指南项目。它解决了对现有方法提出的担忧,并探索了改进的方法。
之前的方法使用了 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ..."),它可以替换为append(CMAKE_CXX_FLAGS "...")。此外,“脏生成器表达式”可用于简洁地引入条件和列出选项:
<code class="cmake">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}")</code>
为了向后兼容,可以使用 add_compile_options 的替代语法() 可以使用:
<code class="cmake">if(MSVC) add_compile_options("/W4" "$<$<CONFIG:RELEASE>:/O2>") else() add_compile_options("-Wall" "-Wextra" "-Werror" "$<$<CONFIG:RELEASE>:-O3>") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_compile_options("-stdlib=libc++") else() # nothing special for gcc at the moment endif() endif()</code>
现代 CMake 不是手动指定 C 标准,而是依赖于指定所需的功能:
<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
这允许 CMake 确定支持该功能所需的编译器标志。
为了避免每个编译器和配置单独的构建目录,包装器脚本可以使用 Visual Studio 等 IDE 或多配置 CMake 生成器编译多个配置。
以上是如何现代化跨平台 CMake 项目中的编译器标志设置?的详细内容。更多信息请关注PHP中文网其他相关文章!