Передайте параметры компиляции напрямую (в обход CMakeLists.txt) - PullRequest
0 голосов
/ 26 сентября 2018

Учитывая код

int main(int argc, char** argv)
{
#ifdef MY_DEFINE
    printf("HERE\n");
#else
    printf("THERE\n");
#endif
}

Чтобы переключить поведение HERE THERE, мне нужно следующее в моем файле `CMakeLists.txt

IF (${MY_DEFINE} MATCHES 1) # I want to remove these lines
    add_compile_options(-DMY_DEFINE)
ENDIF(${MY_DEFINE} MATCHES 1) # Up to here

Затем я могу

cmake -DMY_DEFINE=1, чтобы получить HERE

cmake -DMY_DEFINE=0, чтобы получить THERE

Все это кажется немного излишним ... Возможно ли удалить эти несколько строк вмой CMakeLists.txt и все еще сможет получить

HERE с чем-то вроде cmake -DMY_DEFINE=1

THERE с просто cmake или cmake -DMY_DEFINE=0?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете использовать команду configure_file вместе с #cmakedefine01 примерно так:

(содержимое configure.h.in)

#cmakedefine01 MY_DEFINE

(в вашем CMakeLists.txt)

configure_file(configure.h.in configure.h @ONLY)

Это приведет к configure.h в вашем каталоге компоновки с соответствующим набором #define.См. документация configure_file для второго примера.

Вы также можете использовать команду CMake option для отображения доступных опций.В вашем случае это будет:

option(MY_DEFINE "This configures whether you print HERE or THERE" OFF)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...