Встраивание одного проекта cmake в другой?

StackOverflow https://stackoverflow.com/questions/1457920

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top