Зависимость подкаталогов CMake

Я очень новичок в CMake. На самом деле, я пробую это через Kdevelop4 в С++.

У меня есть привычка создавать поддиры для каждого создаваемого пространства имен, даже если все источники должны быть скомпилированы и объединены в один исполняемый файл. Ну, когда я создаю каталог под kdevelop, он обновляет CMakeLists.txt с помощью команды add_subdirectory и создает под ним новый CMakeLists.txt, но только это не добавляет источники в него в список компиляции.

У меня есть корень CMakeLists.txt следующим образом:

project(gear2d)

add_executable(gear2d object.cc main.cc)

add_subdirectory(component)

В компоненте/у меня есть источники, которые я хочу скомпилировать и связать для создания исполняемых файлов gear2d. Как я могу это сделать?

Часто задаваемые вопросы CMake содержат эту запись, но если это ответ, я предпочел бы остаться с обычными Make файлами.

Есть ли способ сделать это?

Ответы

Ответ 1

Добавление подкаталога не намного больше, чем указание CMake, что он должен войти в каталог и искать там другой CMakeLists.txt. Вам все равно нужно создать библиотеку с исходными файлами с add_library и связать ее с вашим исполняемым файлом target_link_libraries. Что-то вроде следующего:

В поддирете CMakeLists.txt

set( component_SOURCES ... ) # Add the source-files for the component here
# Optionally you can use file glob (uncomment the next line)
# file( GLOB component_SOURCES *.cpp )below

add_library( component ${component_SOURCES} )

Топ-dir CMakeLists.txt

project( gear2d )
add_subdirectory( component )
add_executable( gear2d object.cc main.cc )
target_link_libraries( gear2d component )