CmakeList:静态库的依赖项

时间:2018-07-17 15:15:10

标签: c++ cmake dependencies static-libraries

让我们想象一下,我们有两个静态库,它们是独立的项目:

################################################
# Logger library ###############################

set(Logger_INCLUDE_DIRS Logger/include)
set(Logger_LIBRARIES Logger)

add_library(Logger STATIC
    ${PROJECT_HEADERS}
    ${PROJECT_RESOURCES}
    ${PROJECT_SOURCES}
    ${MISC}
    )
target_include_directories(Logger
    PUBLIC
        include
        )

################################################
# Utils library ################################

add_library(Utils STATIC
    ${PROJECT_HEADERS}
    ${PROJECT_RESOURCES}
    ${PROJECT_SOURCES}
    ${MISC}
    )

Utils库依赖于Logger库进行记录

以下哪种方式是正确的 Logger Utils 图书馆的资源,或者它们都不正确,我需要使用另一个

我在这里有两个选择,第一个是仅提供* .h文件,据了解它对于静态库是足够的:

target_include_directories(Utils
    PUBLIC
        include
        ${Logger_INCLUDE_DIRS}
        )

另一种方法是使用target_link_libraries,据我所知* .h文件也已链接,但是通常我们不需要将一个静态库与另一个静态库链接,这是多余的:

target_link_libraries(Utils
    ${Logger_LIBRARIES}
    )

1 个答案:

答案 0 :(得分:3)

只要一个库/可执行目标使用另一个库目标,就使用target_link_libraries。不要考虑链接静态库的冗余性。

在CMake中,链接目标比简单的链接库要多得多。 CMake的很大一部分是在链接时传播库属性。只需使用它即可。


此外,如果您决定将STATIC库转换为SHARED,请使用target_link_libraries在这种转换中不提供其他操作。