Опция переопределения в подпроекте CMake


Я пытаюсь повторно использовать CMakeLists.txt стороннего проекта, источник которого я не хочу менять ( expat, если быть точным). Я добавил проект в качестве подпроекта верхнего уровня, используя add_subdirectory.

Это работает, но теперь я хотел бы установить значение некоторых подпроектов option на верхнем уровне CMakeLists.txt. Как мне это сделать?

4 13

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 в expat CMakeLists.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 )