Зависимость подкаталогов CMake - PullRequest
15 голосов
/ 12 апреля 2011

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

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

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


project(gear2d)

add_executable(gear2d object.cc main.cc)

add_subdirectory(component)

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

В CMake FAQ есть эта запись, но если это ответ, я бы предпочел остаться с простыми Makefiles.

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

1 Ответ

18 голосов
/ 12 апреля 2011

Добавление подкаталога делает не больше, чем указывает 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} )

Top-dir CMakeLists.txt

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