Ricerca…


Sintassi

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

Compilare Requisiti di Caratteristica

Le caratteristiche del compilatore richieste possono essere specificate su una destinazione utilizzando il comando target_compile_features :

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

Le funzionalità devono essere parte di CMAKE_C_COMPILE_FEATURES o CMAKE_CXX_COMPILE_FEATURES ; altrimenti cmake segnala un errore. Cmake aggiungerà eventuali flag necessari come -std=gnu++11 alle opzioni di compilazione del target.

Nell'esempio, le funzionalità sono dichiarate PRIVATE : i requisiti verranno aggiunti all'obiettivo, ma non ai suoi utenti. Per aggiungere automaticamente i requisiti a un edificio target contro foo, è necessario utilizzare PUBLIC o INTERFACE anziché 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
)

Selezione della versione C / C ++

La versione ricercata per C e C ++ può essere specificata globalmente utilizzando rispettivamente le variabili CMAKE_C_STANDARD (i valori accettati sono 98, 99 e 11) e CMAKE_CXX_STANDARD (i valori accettati sono 98, 11 e 14):

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

Questi aggiungeranno le opzioni di compilazione necessarie sugli obiettivi (es. -std=c++11 per gcc).

La versione può essere resa obbligatoria impostando su ON le variabili CMAKE_C_STANDARD_REQUIRED e CMAKE_CXX_STANDARD_REQUIRED rispettivamente.

Le variabili devono essere impostate prima della creazione del target. La versione può anche essere specificata per target:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow