Suche…


Syntax

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

Funktionsanforderungen kompilieren

Erforderliche Compiler-Features können mit dem Befehl target_compile_features auf einem Ziel angegeben werden :

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

Die Funktionen müssen Bestandteil von CMAKE_C_COMPILE_FEATURES oder CMAKE_CXX_COMPILE_FEATURES sein . Ansonsten meldet cmake einen Fehler. Cmake fügt den Kompilierungsoptionen des Ziels alle erforderlichen Flags wie -std=gnu++11 .

In dem Beispiel werden die Features als PRIVATE deklariert: Die Anforderungen werden dem Ziel hinzugefügt, nicht jedoch seinen Verbrauchern. Um die Anforderungen automatisch zu einem Zielgebäude gegen foo hinzuzufügen, sollte PUBLIC oder INTERFACE anstelle von 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 ++ - Versionsauswahl

Die gewünschte Version für C und C ++ kann mit den Variablen CMAKE_C_STANDARD ( CMAKE_C_STANDARD Werte sind 98, 99 und 11) und CMAKE_CXX_STANDARD ( CMAKE_CXX_STANDARD Werte sind 98, 11 und 14) global angegeben werden:

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

-std=c++11 werden die erforderlichen Kompilierungsoptionen für Ziele -std=c++11 (z. B. -std=c++11 für gcc).

Die Version kann als Anforderung festgelegt werden, indem die Variablen CMAKE_C_STANDARD_REQUIRED und CMAKE_CXX_STANDARD_REQUIRED auf ON CMAKE_CXX_STANDARD_REQUIRED werden.

Die Variablen müssen vor der Zielerstellung festgelegt werden. Die Version kann auch pro Ziel angegeben werden:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow