Одной из проблем при разработке программного обеспечения является обеспечение совместимости с различными версиями компиляторов и их наборами функций. В частности, определение того, поддерживает ли компилятор C 11, может иметь решающее значение для проектов, использующих новые возможности языка.
CMake предоставляет удобный способ решения этой проблемы. В CMake версии 3.1.0 и более поздних версиях имеется переменная CMAKE_CXX_COMPILE_FEATURES, в которой перечислены функции C, поддерживаемые активным компилятором.
На практике вместо того, чтобы напрямую полагаться на эту переменную, CMake предоставляет более структурированные механизмы для определения стандартов и функций языка C.
Явное указание стандарта C
Один из вариантов — установить CXX_STANDARD и Свойства CXX_STANDARD_REQUIRED для вашего целевого объекта CMake. Здесь явно указывается желаемый стандарт C и его обязательность (если компилятор его не поддерживает, сборка завершится неудачей).
Например:
add_executable(prog main.cc)
set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)
Указание необходимых функций C
В качестве альтернативы вы можете использовать команду target_compile_features для указания используемых функций C по вашей цели. Затем CMake определит соответствующий стандарт C на основе этих функций.
Глобальное свойство CMAKE_CXX_KNOWN_FEATURES перечисляет доступные функции C для рассмотрения.
Например:
add_executable(foobar main.cc)
set(needed_features
cxx_strong_enums
cxx_constexpr
cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
Проверка поддерживаемых функций
Чтобы проверить поддерживаемые функции C вашего компилятора:
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
message("Your C compiler supports these C features:")
foreach(feature in ${CMAKE_CXX_COMPILE_FEATURES})
message(feature)
endforeach()
Эти методы дают вам гибкость и контроль над стандартом языка C и функциями, используемыми в ваших проектах CMake.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3