CMake принудительно устанавливает после add_subdirectory - PullRequest
1 голос
/ 10 июня 2019

Мы преобразуем большой проект на основе Makefile в систему на основе CMake.У меня есть множество зависимостей, которые мне нужно построить перед созданием нашего кода.Первые три зависимости строятся с использованием следующего:

add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
add_subdirectory(dependencies/log4c-1.2.4)

expat имеет собственный файл CMakeLists.txt и собирается без проблем.Я хотел бы принудительно установить expat в промежуточный каталог, прежде чем продолжить.Для libuuid я использую ExternalProject_Add, и как часть этого процесса он устанавливается в промежуточный каталог.

Затем, когда я собираю log4c, который нуждается в экспате, я могу указать его местоположение экспата.В противном случае мне нужно, чтобы кто-то получил доступ к абсолютному пути для временного расположения сборки экспата.

Я попытался добавить следующее после add_subdirectory:

add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
install(TARGETS expat LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/usr/lib)
add_subdirectory(dependencies/log4c-1.2.4)

К сожалению, CMake не будет запускать код установки expat.Как заставить экспат установить после сборки, но до сборки остальной части проекта?

1 Ответ

2 голосов
/ 10 июня 2019

Это похоже на основной вариант использования ExternalProject_Add, который лучше всего использовать как superbuild setup.Это означает, что ваш проект верхнего уровня («superbuild») не создает никакого реального кода и вместо этого состоит только из ExternalProject_Add вызовов.Ваш «настоящий» проект добавляется как один из «внешних» проектов.Это позволяет вам настроить супербилд со всеми зависимостями, упорядочением и т. Д.

Рабочий процесс выглядит следующим образом:

  1. Сгенерируйте проект супербилда.
  2. Сборкапроект суперстройки.Это создаст и установит все зависимости, а также создаст (и соберет) ваш реальный проект.
  3. Переключитесь на систему сборки, сгенерированную для вашего реального проекта, и начните дальнейшую разработку с ее использованием.Ваши зависимости уже правильно настроены и установлены сборкой проекта superbuild на предыдущем шаге.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...