Buscar..


Sintaxis

  • target_compile_features (objetivo PRIVADO | PÚBLICA | INTERFACE feature1 [característica2 ...])

Requisitos de la característica de compilación

Las características requeridas del compilador se pueden especificar en un destino usando el comando target_compile_features :

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

Las características deben ser parte de CMAKE_C_COMPILE_FEATURES o CMAKE_CXX_COMPILE_FEATURES ; cmake informa un error de lo contrario. Cmake agregará los indicadores necesarios, como -std=gnu++11 a las opciones de compilación del destino.

En el ejemplo, las características se declaran PRIVATE : los requisitos se agregarán al objetivo, pero no a sus consumidores. Para agregar automáticamente los requisitos a un edificio de destino contra foo, se debe utilizar PUBLIC o INTERFACE lugar 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
)

Selección de versión C / C ++

La versión deseada para C y C ++ se puede especificar globalmente utilizando las variables CMAKE_C_STANDARD respectivamente (los valores aceptados son 98, 99 y 11) y CMAKE_CXX_STANDARD (los valores aceptados son 98, 11 y 14):

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

Estos agregarán las opciones de compilación necesarias en los objetivos (por ejemplo, -std=c++11 para gcc).

La versión puede ser un requisito mediante el establecimiento de ON las variables CMAKE_C_STANDARD_REQUIRED y CMAKE_CXX_STANDARD_REQUIRED respectivamente.

Las variables deben establecerse antes de la creación del objetivo. La versión también se puede especificar por objetivo:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow