2016-05-31 1 views
1

Это может быть боль, чтобы refrence ExternalProjects, когда их установочные цели перепутаны. Поэтому можно захотеть создать и установить ExternalProjects один раз перед созданием основных файлов проекта для данного проекта. Возможно ли это с CMake и как это сделать?Как построить cmake ExternalProject при настройке основного?

ответ

3

Вы можете использовать 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 что:

  1. Создать CMakeLists.txt для other_project с configure_file, вызываемом из основного проекта (до execute_process команды).

  2. Передать переменные из основного проекта как -D параметров на ${CMAKE_COMMAND}.