Recherche…


Syntaxe

  • target_compile_features (cible PRIVÉ | PUBLIC | INTERFACE feature1 [feature2 ...])

Compiler les conditions requises

Les fonctions de compilation requises peuvent être spécifiées sur une cible à l'aide de la commande target_compile_features :

add_library(foo
    foo.cpp
)
target_compile_features(foo
    PRIVATE          # scope of the feature
    cxx_constexpr    # list of features
)

Les fonctionnalités doivent faire partie de CMAKE_C_COMPILE_FEATURES ou CMAKE_CXX_COMPILE_FEATURES ; cmake signale une erreur sinon. Cmake ajoutera les options nécessaires telles que -std=gnu++11 aux options de compilation de la cible.

Dans l'exemple, les fonctionnalités sont déclarées PRIVATE : les exigences seront ajoutées à la cible, mais pas à ses consommateurs. Pour ajouter automatiquement les exigences à un bâtiment cible par rapport à foo, vous devez utiliser PUBLIC ou INTERFACE au lieu de PRIVATE :

target_compile_features(foo
    PUBLIC    # this time, required as public
    cxx_constexpr
)

add_executable(bar
    main.cpp
)
target_link_libraries(bar
    foo       # foo's public requirements and compile flags are added to bar
)

Sélection de version C / C ++

Les versions CMAKE_C_STANDARD pour C et C ++ peuvent être spécifiées globalement en utilisant respectivement les variables CMAKE_C_STANDARD (les valeurs acceptées sont 98, 99 et 11) et CMAKE_CXX_STANDARD (les valeurs acceptées sont 98, 11 et 14):

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

Celles-ci ajouteront les options de compilation nécessaires sur les cibles (par exemple, -std=c++11 pour gcc).

La version peut être rendue obligatoire en définissant sur ON les variables CMAKE_C_STANDARD_REQUIRED et CMAKE_CXX_STANDARD_REQUIRED respectivement.

Les variables doivent être définies avant la création de la cible. La version peut également être spécifiée par cible:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow