Поиск…


Синтаксис

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

Компиляция требований к характеристикам

Необходимые функции компилятора могут быть указаны в целевом режиме с помощью команды target_compile_features :

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

Эти функции должны быть частью CMAKE_C_COMPILE_FEATURES или CMAKE_CXX_COMPILE_FEATURES ; cmake сообщает об ошибке в противном случае. Cmake добавит все необходимые флаги, такие как -std=gnu++11 в параметры компиляции цели.

В этом примере функции объявляются PRIVATE : требования будут добавлены к цели, но не к ее потребителям. Чтобы автоматически добавлять требования к целевому зданию против foo, вместо PRIVATE следует использовать PUBLIC или INTERFACE :

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 ++

Требуемая версия для C и C ++ может быть указана глобально, используя, соответственно, переменные CMAKE_C_STANDARD (принятые значения: 98, 99 и 11) и CMAKE_CXX_STANDARD (принятые значения: 98, 11 и 14):

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

Они добавят необходимые параметры компиляции для целей (например, -std=c++11 для gcc).

Версия может быть выполнена, установив для ON переменные CMAKE_C_STANDARD_REQUIRED и CMAKE_CXX_STANDARD_REQUIRED соответственно.

Переменные должны быть установлены до создания цели. Версия также может быть указана для каждой цели:

set_target_properties(foo PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow