2016-04-15 3 views
3

Я пытаюсь перенести систему сборки boost-build на cmake.CMAKE: автоматически добавлять зависимости зависимостей

Одна из функций boost-build имеет автоматическую привязку зависимостей зависимостей.

Например:

наддува сборки:

Я строю исполняемый app. Это зависит от lib2

exe app 
: [ glob *.cpp ] 
    /proj/lib2//lib2 
; 

В свою очередь, зависит от lib2lib1

lib lib2 
: [ glob *.cpp ] 
    /proj/lib1//lib1 
; 

и lib1 не имеет зависимостей

lib lib1 
: [ glob *.cpp ] 
; 

Оба lib1 и lib2 являются статическими ЛИЭС.

наддува сборки автоматически добавит lib1.a к линкера линии для app, потому что он знает, что lib2.a зависит от lib1.a

CMake:

Явное о том, как lib1 и lib2 в target_link_libraries директивные работ :

lib1:

add_library(lib1 STATIC ${SOURCES}) 

lib2:

add_library(lib2 STATIC ${SOURCES}) 

приложение:

add_executable(app ${SOURCES}) 
target_link_libraries(app lib1 lib2) 

Так как количество библиотек растет это становится громоздким.

target_link_libraries(app lib1 lib2 lib3 lib4 lib5 lib6 lib7 lib8 lib9 ... libN) 

Вопросы:

  • Есть ли способ, чтобы определить, что lib2 зависит от lib1
  • Есть ли способ сказать app тянуть в lib2и все lib2 зависит?
+0

, вы можете взглянуть на: http://stackoverflow.com/questions/32756195/recursive-list-of-link-libraries-in-cmake –

+1

@TomaszLewowski это намного лучший вариант: [настройка- зависимостей между библиотеками-cmake] (http://stackoverflow.com/questions/7970071/setting-dependencies-between-libraries-cmake) –

ответ

3

Это так просто, как добавление к target_link_librarieslib2

lib1:

add_library(lib1 STATIC ${SOURCES}) 

lib2:

add_library(lib2 STATIC ${SOURCES}) 
target_link_libraries(lib2 lib1) 

приложение:

add_executable(app ${SOURCES}) 
target_link_libraries(app lib2) 
+1

Обратите внимание, что этот подход также избавляет вас от головной боли зависимости порядка с определенными связующими инструментами , Например, компоновщик gcc' очень разборчив и откажется от ссылки, если вы не упорядочиваете аргументы в сплющенном списке статических библиотек правильно. Путем моделирования зависимостей библиотек, как здесь, CMake может понять все это для вас. – ComicSansMS

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