Подтвердить что ты не робот

Передача аргумента в CMAKE через командную строку

У меня есть makefile для моего проекта, а также я передаю некоторый аргумент и основываясь на этом аргументе, я устанавливаю некоторый флаг. Я могу это сделать. но теперь я хочу сделать то же самое с помощью cmake. Я создал cmakelist.txt, но не знаю, как передать аргумент и проверить значение аргумента в cmakelist.txt.

Пример моего файла makefile:

ifeq "$(FAB)" "po"
      //setting some flags
else
      //setting some iother flag
endif

Каков способ принять аргумент из командной строки и установить флаги на основе этого?

4b9b3361

Ответ 1

В файле CMakeLists.txt создайте переменную кеша, как описано здесь:

SET(FAB "po" CACHE STRING "Some user-specified option")

Источник: http://cmake.org/cmake/help/v2.8.8/cmake.html#command:set

Затем либо используйте GUI (ccmake или cmake-gui), чтобы установить переменную кэша, либо укажите значение переменной в командной строке cmake:

cmake -DFAB:STRING=po

Источник: http://cmake.org/cmake/help/v2.8.8/cmake.html#opt:-Dvar:typevalue

Измените переменную кэша на логическое, если на самом деле ваш параметр является логическим.

Ответ 2

CMake 3.13 на Ubuntu 16.04

Этот подход является более гибким, поскольку он не ограничивает MY_VARIABLE типом:

$ cat CMakeLists.txt 
message("MY_VARIABLE=${MY_VARIABLE}")
if( MY_VARIABLE ) 
    message("MY_VARIABLE evaluates to True")
endif()

$ mkdir build && cd build

$ cmake ..
MY_VARIABLE=
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=True
MY_VARIABLE=True
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=False
MY_VARIABLE=False
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=1
MY_VARIABLE=1
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=0
MY_VARIABLE=0
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build