Это может быть боль, чтобы refrence ExternalProjects, когда их установочные цели перепутаны. Поэтому можно захотеть создать и установить ExternalProjects один раз перед созданием основных файлов проекта для данного проекта. Возможно ли это с CMake и как это сделать?Как построить cmake ExternalProject при настройке основного?
ответ
Вы можете использовать cmake
вызов в execute_process
для конфигурации и сборки проекта CMake, который содержит ExternalProject:
other_project/CMakeLists.txt:
project(other_project)
include(ExternalProject)
ExternalProject_Add(<project_name> <options...>)
CMakeLists.txt:
execute_process(
COMMAND ${CMAKE_COMMAND} --build . ${CMAKE_SOURCE_DIR}/other_project
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/other_project
)
Такая ва y other_project будет сконфигурирован и построен (из-за опции --build
) в каталоге ${CMAKE_BINARY_DIR}/other_project
. Если вы не отключите установку в ExternalProject_Add
, то она будет выполняться при построении other_project.
Как правило, вы хотите использовать опции ExternalProject, такие как SOURCE_DIR
, BINARY_DIR
, INSTALL_DIR
, которые должны быть выведены из переменных в основном проекте. У вас есть два пути для achive что:
Создать CMakeLists.txt для other_project с
configure_file
, вызываемом из основного проекта (доexecute_process
команды).Передать переменные из основного проекта как
-D
параметров на${CMAKE_COMMAND}
.