Как определить переменную препроцессора через CMake?
Эквивалентный код будет #define foo
.
Как определить переменную препроцессора через CMake?
Эквивалентный код будет #define foo
.
Долгое время в CMake для этой цели add_definitions
команда add_definitions
. Однако недавно команда была заменена более тонким подходом (отдельные команды для определений компиляции, включают в себя каталоги и параметры компилятора).
Пример использования новых add_compile_definitions:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
Или же:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
Хорошая часть этого заключается в том, что он обходит потрепанный трюк, который CMake имеет для add_definitions
. CMake такая потрепанная система, но они наконец-то обрели здравый смысл.
Дополнительную информацию о том, какие команды использовать для флагов компилятора, можно найти здесь: https://cmake.org/cmake/help/latest/command/add_definitions.html.
Точно так же вы можете сделать это для каждой цели, как объяснено в ответе Джима Хунцикера.
Чтобы сделать это для конкретной цели, вы можете сделать следующее:
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
Это следует делать, если у вас есть более одной цели, которую вы строите, и вы не хотите, чтобы все они использовали одни и те же флаги. Также см. Официальную документацию по target_compile_definitions.
Другое решение, предлагаемое на этой странице, полезно только для старых версий Cmake. Здесь решение для новой версии. Проверьте версию своего Cmake с помощью
$ cmake --version
и выберите решение, которое соответствует вашим потребностям. Документацию по cmake можно найти на официальной странице.
С CMake версии 3.3.2, чтобы создать
#define foo
Мне нужно было использовать:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
и, чтобы иметь определение макроса препроцессора, подобное этому:
#define foo=5
строка так изменена:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)