首頁 > 後端開發 > C++ > 主體

如何現代化跨平台 CMake 專案中的編譯器標誌設定?

Linda Hamilton
發布: 2024-11-03 11:08:30
原創
339 人瀏覽過

How to Modernize Compiler Flag Settings in Cross-Platform CMake Projects?

在跨平台CMake 專案中設定編譯器標誌的現代方法

簡介

本文提供了有關在跨平台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() 的向後相容方法

為了向後相容,可以使用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>
登入後複製

使用target_compile_features() 的基於特徵的方法

現代CMake 不是手動指定C 標準,而是依賴指定所需的功能:

<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
登入後複製

這允許CMake 確定支援該功能所需的編譯器標誌。

多配置建置環境

為了避免每個編譯器和配置單獨的建置目錄,包裝器腳本可以使用 Visual Studio 等 IDE 或多配置 CMake 產生器編譯多個配置。

以上是如何現代化跨平台 CMake 專案中的編譯器標誌設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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