CMake, если (DEFINED MY_COMPILE_DEF) не работает. Как я могу использовать определение прекомпиляции как условное? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь использовать определение компиляции в качестве условия для создания исполняемого файла Gtest. Код проблемы c CMake выглядит следующим образом:

add_compile_definitions(TEST_BENCH)
if(DEFINED TEST_BENCH)
  enable_testing()
endif()

Это не работает. Я прочитал несколько похожих вопросов и ответов, касающихся использования синтаксиса $ {my_var}, чего нет в моем коде.

Можно ли использовать определения компиляции в условных выражениях, и если да, то как?

1 Ответ

0 голосов
/ 06 мая 2020

Используйте переменную cmake (кеш), которая также позволит пользователям правильно настроить ваш проект.

set(TEST_BENCH OFF CACHE BOOL "Enables testing of your project")
if(TEST_BENCH)
   add_compile_definition(TEST_BENCH)
   enable_testing()
endif()

Затем пользователь (и вы) можете настроить ваш проект в соответствии со своими потребностями с помощью ccmake или cmake-gui или cmake -DTEST_BENCH=ON. Я считаю, что target_compile_definitions обычно предпочтительнее, чем глобальный add_compile_definitions.

Тем не менее, я бы не советовал, вы можете сопоставить переменную COMPILE_DEFINITIONS, измененную на add_compile_definition, с TEST_BENCH и это способ проверить, установлен ли макрос или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...