Определить макрос препроцессора через cmake - PullRequest
237 голосов
/ 26 января 2012

Как определить переменную препроцессора с помощью cmake?

Эквивалентный код будет #define foo.

Ответы [ 3 ]

342 голосов
/ 26 января 2012

В течение длительного времени CMake имел команду 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

Аналогично, вы можете сделать это в- цель, как объяснено в ответе Джима Ханзикера.

211 голосов
/ 27 августа 2015

Чтобы сделать это для конкретной цели, вы можете сделать следующее:

target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)

Вы должны сделать это, если у вас есть более одной цели, которую вы строите, и вы не хотите, чтобы они всеиспользовать те же флаги.Также см. Официальную документацию по target_compile_definitions .

11 голосов
/ 06 ноября 2018

Другое решение, предлагаемое на этой странице, полезно только для старых версий 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(....)
...