Опция переопределения в подпроекте CMake
Я пытаюсь повторно использовать CMakeLists.txt
стороннего проекта, источник которого я не хочу менять ( expat, если быть точным). Я добавил проект в качестве подпроекта верхнего уровня, используя add_subdirectory
.
Это работает, но теперь я хотел бы установить значение некоторых подпроектов option
на верхнем уровне CMakeLists.txt
. Как мне это сделать?
4 ответа:
Смотритеаналогичный вопрос с хорошим ответом.
Ответ вкратце:
SET(SOME_EXPAT_OPTION OFF CACHE BOOL "Use some expat option")
Если подпроект использует
option
(Неset
) для своих настроек конфигурации, то вы можете указать значения с помощьюoption
Перед добавлением подкаталога:option(LIB_OPTION1 "" OFF) option(LIB_OPTION2 "" ON) add_subdirectory(${CMAKE_SOURCE_DIRECTORY}/lib)
Вы можете задать параметры с требуемыми настройками (вкл. или выкл.) перед вызовом
ADD_SUBDIRECTORY
. Это будет иметь приоритет над командамиOPTION
в expatCMakeLists.txt
, так как последний параметр дляOPTION
является только значением по умолчанию (которым пренебрегают, если эти настройки уже существуют).
Команда SET - имеет опцию 'PARENT_SCOPE':
If PARENT_SCOPE is present, the variable will be set in the scope above the current scope. Each new directory or function creates a new scope. This command will set the value of a variable into the parent directory or calling function (whichever is applicable to the case at hand). PARENT_SCOPE cannot be combined with CACHE.
(см.: http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:set )