Я пытаюсь интегрировать несколько различных проектов, которые мы делали через CMake. В целом, проекты неравномерно выложены, но имеют некоторое сходство. Для каждой библиотеки библиотека обычно имеет тестовый код/исполняемый файл, который я хочу поддерживать ... и они также могут иметь свои собственные взаимозависимости. Кроме того, эти библиотеки поддерживаются в отдельных хранилищах (меркуриальные, если это имеет значение). Взаимозависимость файлов, как это:Что такое хорошая структура для интеграции модулей через Cmake
- библиотека А не зависит
- библиотека B является независимой
- библиотека C не зависит
- Библиотека E зависит от A, B, C
- Исполняемые 1 в зависимости от C
- Исполняемые 2 зависит от E
- Исполняемый 3 зависит от E
Таким образом, каждая библиотека обычно выкладываются как этот
+ LibraryA\
| + CMakeLists.txt
| + LibraryA
| | + CMakeLists.txt
| | + Include\
| | | header.h
| | + Source\
| | | lib.cpp
| + Test\
| | + CMakeLists.txt
| | main.cpp
И чем всеохватывающая структура
+ Root\
| + CMakeLists.txt
| + LibraryA\
| + LibraryB\
| + LibraryC\
| + LibraryE\
| + Executable1\
| + Executable2\
| + Executable3\
С каждой папкой является ее проектом собственных SUBDIRS. Имеет ли эта структура смысл с cmake? Как вы поддерживаете зависимость между этими проектами? (Если я сменил A, Executable 3 должен перестроить)?
Вы можете захотеть взглянуть на [мой предыдущий ответ] (HTTP : //stackoverflow.com/questions/16398937/cmake-and-finding-other-projects-and-their-dependencies/16404000#16404000). –
@Haroogan Итак, включение родительских проектов в декларацию проекта «CMakeLists» делает зависимости? '(B A CXX)' означает, что A зависит от B (это не в документе)? Есть ли способ сделать это, если мы не хотим, чтобы B знал об A? – IdeaHat
Нет, вас путают короткие имена библиотек, то есть 'A',' B', 'C'. Последние два параметра для 'project' - это языки' C' и 'CXX', которые будут использоваться для этого проекта, поэтому' project (B A CXX) 'является незаконным. 'project' не имеет ничего общего с зависимостями, он просто устанавливает имя для проекта (1-й параметр) и языков (последние 2 параметра). Я рекомендую вам сначала познакомиться с CMake и прочитать документацию, прежде чем выполнять такую сложную задачу, как разработку структуры для огромного многокомпонентного проекта. –