LINUX.ORG.RU

[CMake]Работа с поддиректориями

 


0

0

Есть примерно такая структура директорий \root_project_dir Makefile \inc \ext_libs \other_stuff \src Makefile main.cpp \network Makefile networks.cpp \ui Makefile uis.cpp

В каждой директории make-файл собирает свои сpp и делает рекурсивный make -C по всем поддиректориям. Имхо, изврат какой-то. Хочу на cmake перейти, но никак не пойму, можно ли его заставить рекурсивно директории указанные собирать. Насколько я понял, придется все поддиректории в виде статических либ собирать и линковать с ними main.o. Или же есть возможность передать информацию об объектных файлах из поддиректорий?

★★

Не ясно что ты хочешь сделать. Во что собираются файлы из отдельной поддиректории? В отдельную либу ? Или ты хочешь вообще из всех файлов сделать один exe-шник ?

Reset ★★★★★
()
Ответ на: комментарий от Reset

Все файлы из всех поддиректорий собираются в объектные, и потом они все линкуются в один исполняемый файл. Вот такого мне хочется. Чтобы можно было «перекомпилировать один файл -> слинковать в исполняемый», а не «перекомпилировать один файл -> пересобирать статическую либу для поддиректории -> слинковать в исполняемый».

kulti ★★
() автор топика

Можно делать как угодно, потому что cmake замечателен.

- Можно сделать корневой CMakeLists.txt с SUBDIR для каждой директории, а в subdir'ах собирать библиотеки. При этом эти библиотеки можно использовать во всех CMakeLists, потому что цели глобальны, т.е.:

CMakeList.txt: SUBDIR(foolib)
CMakeList.txt: SUBDIR(src)
foolib/CMakeLists.txt: ADD_LIBRARY(foo STATIC foo.c)
src/CMakeLists.txt: ADD_EXECUTABLE(bar bar.c)
src/CMakeLists.txt: TARGET_LINK_LIBRARIES(bar foo)

- Можно собирать библиотеки из корневого CMakeLists.txt

- Можно вообще не использовать библиотеки - все исходники собрать в один список и скормить его в ADD_EXECUTABLE. При этом исходники можно указывать как руками, так и собрать автоматически с помощью FILE(GLOB ...). Только не рекоммендуется использовать GLOB_RECURSE, потому что под него могут попадать всякие исходники тесты, созданные cmake'ом в CMakeFiles/, но в тоже время не рекоммендуются и insource билды.

В общем - как удобно, так и делай.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.