Передача аргумента в CMAKE через командную строку
У меня есть makefile для моего проекта, а также я передаю некоторый аргумент и основываясь на этом аргументе, я устанавливаю некоторый флаг. Я могу это сделать. но теперь я хочу сделать то же самое с помощью cmake. Я создал cmakelist.txt
, но не знаю, как передать аргумент и проверить значение аргумента в cmakelist.txt
.
Пример моего файла makefile:
ifeq "$(FAB)" "po"
//setting some flags
else
//setting some iother flag
endif
Каков способ принять аргумент из командной строки и установить флаги на основе этого?
Ответы
Ответ 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