Должен ли я отделить CMakeList.txt от исходной папки? - PullRequest
4 голосов
/ 07 июля 2011

Я новичок в сборке, когда сталкиваюсь с Autotool, у меня есть возможность записать только один Makefile.am в верхнюю папку сборки и оставить исходную папку со всеми файлами cpp чистой. Я мог бы использовать VPATH, чтобы сказать automake искать исходный код внутри этой папки вместо записи / src / Everywhere. (см. мой старый вопрос здесь: Automake Variables, чтобы привести в порядок Makefile.am )

Однако мне кажется, что у CMake нет VPATH, и некоторые лисы сказали, что это невозможно. Так что есть два варианта:

  • Создать CMakeList.txt в исходной папке
  • Создайте CMakeList.txt в верхней папке сборки и оставьте исходный текст в покое, но мне нужно будет добавить «/ src» к каждому файлу исходного кода.

Какой из них используется чаще? Я предпочитаю второе, потому что оно оставляет мой исходный код чистым от любого источника, связанного со сборкой. В таком случае есть ли способ избавиться от "/ src"?

Ответы [ 2 ]

5 голосов
/ 10 июля 2011

В нашей компании мы используем первый вариант, имея CMakeLists.txt в каждом подкаталоге и собирая дерево из root-CMakeLists.txt с помощью команды add_subdirectory.

Этомодульный подход, при котором каждый подкомпонент (представьте, что у проекта есть разные части, такие как boost, разделен на system, thread, date_time и т. д.) имеет свой собственный файл сборки.Если пользователь хочет, он может просто построить субкомпонент или построить весь проект.

Мы дополнительно используем это как простой способ включить дополнительные субкомпоненты в проект.Затем пользователь может установить значение Bool, например BUILD_SUBFOO, и add_subdirectory будет просто выполняться, если этот Bool равен TRUE.

. Известные проекты также используют этот подход.Вот ссылка на корень CMakeLists.txt из KDevelop (смотрите строки 52-62).

0 голосов
/ 07 июля 2011

Я вполне уверен, что вы можете сделать:

FILE(GLOB Source_files src/*.cpp)

, который будет делать именно то, что вы хотите.

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