Встраивание одного проекта cmake в другой? - PullRequest
27 голосов
/ 22 сентября 2009

У меня есть два проекта, оба из которых используют CMake. Теперь я хочу включить один из проектов в виде библиотеки внутри другого, сохраняя при этом возможность компилировать их как отдельные проекты.

Что я сделал до сих пор: используйте систему контроля версий для клонирования копии дочернего проекта в подкаталог родительского проекта. Я использовал add_subdirectory, чтобы включить CMakeLists.txt дочернего проекта в родительский проект. И я исправил конфликт имен между целями, переименовав некоторые цели в дочернем проекте.

Однако проблема, с которой я сталкиваюсь, заключается в том, что различные тесты конфигурации в дочернем проекте, похоже, не выполняются. Например, дочерний проект использует модуль FindThreads, чтобы определить, какие примитивы синхронизации доступны. Родительский проект не знает о проблемах с многопоточностью и поэтому не имеет тестов, связанных с этим. Аналогично, дочерний проект имеет различные тесты для заголовков и такие, которые не нужны родительскому проекту. Похоже, что ни один из этих тестов не выполняется, а символы, определенные в этих тестах, не добавляются в файл CMakeCache.txt.

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

1 Ответ

17 голосов
/ 25 ноября 2009

В CMake 2.8 добавлен новый модуль Внешний проект , который позволяет вам создать пользовательскую цель для запуска сборки другого проекта CMake. Документация на это довольно слабая, но похоже, что она может делать то, что вы хотите.

Я думаю, что идея будет заключаться в том, чтобы вызвать ExternalProject_Add из вашего родительского проекта, указав его на исходный каталог дочернего проекта (вы даже можете заставить его проверить дочерний проект из SVN или CVS, хорошо!) 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...