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

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

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

Ответ 1

См. аналогичный вопрос с хорошим ответом.

Короче говоря:

SET(SOME_EXPAT_OPTION OFF CACHE BOOL "Use some expat option")

Ответ 2

Если подпроект использует option (not set) для своих параметров конфигурации, вы можете указать значения с помощью option перед добавлением подкаталога:

option(LIB_OPTION1 "" OFF)
option(LIB_OPTION2 "" ON)
add_subdirectory(${CMAKE_SOURCE_DIRECTORY}/lib)

Ответ 3

Вы можете определить параметры с нужными настройками (ВКЛ или ВЫКЛ) перед вызовом ADD_SUBDIRECTORY. Затем это будет иметь приоритет над командами OPTION в expat CMakeLists.txt, поскольку последний параметр OPTION является только значением по умолчанию (которое игнорируется, если эти настройки уже существуют).

Ответ 4

У команды 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)