首頁 > 後端開發 > C++ > 如何使用生成器表達式在跨平台 CMake 專案中設定編譯器標誌?

如何使用生成器表達式在跨平台 CMake 專案中設定編譯器標誌?

DDD
發布: 2024-11-03 01:08:02
原創
666 人瀏覽過

How to Set Compiler Flags in Cross-Platform CMake Projects Using Generator Expressions?

在跨平台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}")
登入後複製

與您原來的方法相比,此方法利用:

  • 生成器表達式,用於根據編譯器和配置有條件定義編譯器選項。
  • 用於在清單中累積選項的字串(APPEND ...)指令。
  • add_compile_options() 函數設定所有目標的選項。

棄用手動標誌設定

如您所注意到的,通常不鼓勵手動設定 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 產生器運算式進行條件標誌設定。
  • 優先使用 add_compile_options() 而不是手動設定 CMAKE_CXX_FLAGS。
  • 使用不同的編譯器選項建立多個目標以實現跨平台相容性。
  • 利用建置包裝腳本從單一 CMake 檔案產生多個配置。

以上是如何使用生成器表達式在跨平台 CMake 專案中設定編譯器標誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板