Zoeken…


Syntaxis

  • target_compile_features ( target PRIVATE | PUBLIC | INTERFACE feature1 [ feature2 ...])

Compileer Functie-eisen

Vereiste compilerfuncties kunnen op een doel worden opgegeven met de opdracht target_compile_features :

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

De functies moeten onderdeel zijn van CMAKE_C_COMPILE_FEATURES of CMAKE_CXX_COMPILE_FEATURES ; cmake meldt anders een fout. Cmake zal alle benodigde vlaggen zoals -std=gnu++11 aan de compileeropties van het doel.

In het voorbeeld worden de functies PRIVATE verklaard: de vereisten worden toegevoegd aan het doel, maar niet aan de consumenten. Om de vereisten automatisch toe te voegen aan een doelgebouw tegen foo, moet PUBLIC of INTERFACE worden gebruikt in plaats van 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
)

C / C ++ versie selectie

De gewenste versie voor C en C ++ kan globaal worden opgegeven met behulp van respectievelijk variabelen CMAKE_C_STANDARD (geaccepteerde waarden zijn 98, 99 en 11) en CMAKE_CXX_STANDARD (geaccepteerde waarden zijn 98, 11 en 14):

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

Hiermee worden de benodigde compileeropties voor doelen toegevoegd (bijvoorbeeld -std=c++11 voor gcc).

De versie kan een eis worden gemaakt door het instellen naar ON de variabelen CMAKE_C_STANDARD_REQUIRED en CMAKE_CXX_STANDARD_REQUIRED respectievelijk.

De variabelen moeten worden ingesteld voordat het doel wordt gemaakt. De versie kan ook per doel worden gespecificeerd:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow