Ответ 1
См. аналогичный вопрос с хорошим ответом.
Короче говоря:
SET(SOME_EXPAT_OPTION OFF CACHE BOOL "Use some expat option")
Я пытаюсь повторно использовать CMakeLists.txt
стороннего проекта, источник которого я не хочу изменять (expat, если быть точным). Я добавил проект как подпроект верхнего уровня, используя add_subdirectory
.
Это работает, но теперь я хотел бы установить значение некоторого подпроекта option
на верхнем уровне CMakeLists.txt
. Как это сделать?
См. аналогичный вопрос с хорошим ответом.
Короче говоря:
SET(SOME_EXPAT_OPTION OFF CACHE BOOL "Use some expat option")
Если подпроект использует option
(not 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)