Maison > développement back-end > C++ > le corps du texte

Comment moderniser les paramètres des indicateurs du compilateur dans les projets CMake multiplateformes ?

Linda Hamilton
Libérer: 2024-11-03 11:08:30
original
340 Les gens l'ont consulté

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

Manières modernes de définir les indicateurs du compilateur dans les projets CMake multiplateformes

Introduction

Cet article fournit des conseils sur la définition des indicateurs du compilateur dans CMake multiplateforme projets. Il répond aux préoccupations soulevées concernant l'approche existante et explore des méthodologies améliorées.

Syntaxe améliorée avec des expressions génératrices

L'approche précédente utilisait set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}..."), qui peut être remplacé par append(CMAKE_CXX_FLAGS "..."). De plus, les « expressions génératrices sales » peuvent être utilisées pour introduire des conditions et lister les options de manière concise :

<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>
Copier après la connexion

Approche rétrocompatible avec add_compile_options()

Pour une compatibilité ascendante, une syntaxe alternative utilisant add_compile_options () peut être utilisé :

<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>
Copier après la connexion

Approche basée sur les fonctionnalités avec target_compile_features()

Au lieu de spécifier manuellement la norme C, CMake moderne s'appuie sur la spécification des fonctionnalités requises :

<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
Copier après la connexion

Cela permet à CMake de déterminer les indicateurs de compilateur nécessaires pour prendre en charge la fonctionnalité.

Environnements de construction multi-configurations

Pour éviter des répertoires de construction séparés pour chaque compilateur et configuration, un script wrapper peut compilez plusieurs configurations avec un IDE comme Visual Studio ou un générateur CMake multi-configuration.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal