cmake
Компилировать функции и стандартный выбор C / C ++
Поиск…
Синтаксис
- 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
)