2013-05-08 5 views
0

Я пытаюсь интегрировать несколько различных проектов, которые мы делали через 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 должен перестроить)?

+1

Вы можете захотеть взглянуть на [мой предыдущий ответ] (HTTP : //stackoverflow.com/questions/16398937/cmake-and-finding-other-projects-and-their-dependencies/16404000#16404000). –

+0

@Haroogan Итак, включение родительских проектов в декларацию проекта «CMakeLists» делает зависимости? '(B A CXX)' означает, что A зависит от B (это не в документе)? Есть ли способ сделать это, если мы не хотим, чтобы B знал об A? – IdeaHat

+0

Нет, вас путают короткие имена библиотек, то есть 'A',' B', 'C'. Последние два параметра для 'project' - это языки' C' и 'CXX', которые будут использоваться для этого проекта, поэтому' project (B A CXX) 'является незаконным. 'project' не имеет ничего общего с зависимостями, он просто устанавливает имя для проекта (1-й параметр) и языков (последние 2 параметра). Я рекомендую вам сначала познакомиться с CMake и прочитать документацию, прежде чем выполнять такую ​​сложную задачу, как разработку структуры для огромного многокомпонентного проекта. –

ответ

0

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

CMake: how best to build multiple (optional) subprojects?

Смежные вопросы