Maison >développement back-end >C++ >Comment moderniser les paramètres des indicateurs du compilateur dans les projets CMake multiplateformes ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 11:08:30380parcourir

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>

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>

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>

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!

Déclaration:
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