首頁  >  文章  >  後端開發  >  如何在多目標 CMake 專案中高效配置編譯器標誌?

如何在多目標 CMake 專案中高效配置編譯器標誌?

Linda Hamilton
Linda Hamilton原創
2024-11-01 19:43:30521瀏覽

How to Efficiently Configure Compiler Flags in Multi-Target CMake Projects?

跨平台CMake 專案中的高效編譯器標誌配置

為不同編譯器和配置設定編譯器選項

解決您對設定編譯器選項的擔憂對於不同的編譯器和配置,這裡有一個更新和改進的方法:

<code class="cmake">cmake_minimum_required(VERSION 3.15)

project(HelloWorld)

string(
    APPEND CXX_FLAGS
    "$<IF:$<CXX_COMPILER_ID:MSVC>,"
        "/W4;$<$<CONFIG:RELEASE>:/O2>,"
        "-Wall;-Wextra;-Werror;"
            "$<$<CONFIG:RELEASE>:-O3>"
            "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
    ">"
)

add_compile_options("${CXX_FLAGS}")

add_executable(HelloWorld "main.cpp")

target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>

改進:

  • 使用CMake 3.8中引入的CMake 生成器表達式語法,更簡單、更簡潔。
  • 利用 add_compile_options() 函數,它允許您以清晰易讀的方式指定編譯器選項。
  • 無需手動設定 CMAKE_CXX_FLAGS 和相似的變數。
  • 使用 target_compile_features() 指定 C 功能,而非明確設定 C 標準。

多目標CMake 項目

滿足您對每個編譯器和配置都有自己的目標的多目標項目,您可以使用以下方法:

<code class="cmake">cmake_minimum_required(VERSION 3.15)

project(HelloWorld)

set(COMPILERS MSVC Clang GNU)
set(CONFIGURATIONS Debug Release)

foreach(_compiler IN LISTS COMPILERS)
    foreach(_config IN LISTS CONFIGURATIONS)
        add_executable(HelloWorld_${_compiler}_${_config} "main.cpp")

        # Set compiler flags for this target
        target_compile_options(HelloWorld_${_compiler}_${_config} PUBLIC
            "$<IF:$<CXX_COMPILER_ID:${_compiler}>,"
                "/W4;$<$<CONFIG:${_config}>:/O2>,"
                "-Wall;-Wextra;-Werror;"
                    "$<$<CONFIG:${_config}>:-O3>"
                    "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
            ">"
        )

        # Set C++ feature requirements for this target
        target_compile_features(HelloWorld_${_compiler}_${_config} PUBLIC cxx_lambda_init_captures)
    endforeach()
endforeach()</code>

改進:

  • 建立多個目標基於編譯器和組態組合的唯一名稱。
  • 分別為每個目標配置編譯器標誌和 C 功能。

最佳實踐和進一步閱讀

這裡是一些可能有用的其他資源:

  • [CMake 教程:多個目標](https: //www.cmake.org/cmake-docs/latest/manual/cmake-tutorial/MultipleTargets.html )
  • [CMake 打包與部署指南](https://cmake.org/cmake-docs/ latest/manual/cmake-packaging.html#packaging-multiple-projects-in-a-single-project )

以上是如何在多目標 CMake 專案中高效配置編譯器標誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn