CMAKE:自动添加依赖项的依赖项

时间:2016-04-15 14:19:03

标签: c++ cmake boost-build

我正在尝试将boost-build构建系统迁移到cmake。

boost-build的一个功能是自动链接依赖项的依赖项。

例如:

升压构建:

我正在构建可执行文件app。这取决于lib2

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

反过来,lib2取决于lib1

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

lib1没有依赖关系

lib lib1
:    [ glob *.cpp ]
;

lib1lib2都是静态库。

boost-build会自动将lib1.a添加到app的链接器行,因为它知道lib2.a取决于lib1.a

cmake的:

明确声明lib1指令中的lib2target_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取决于哪些内容?

1 个答案:

答案 0 :(得分:4)

就像将target_link_libraries添加到lib2

一样简单

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)