c++ - CMakeList : Dependencies for static libraries

标签 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 sources for Utils library 或者他们都不正确,我需要使用另一个

我这里有两个选择,第一个是只提供 *.h 文件,据了解静态库就足够了:

target_include_directories(Utils
    PUBLIC
        include
        ${Logger_INCLUDE_DIRS}
        )

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

target_link_libraries(Utils
    ${Logger_LIBRARIES}
    )

最佳答案

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

在 CMake 中,链接目标不仅仅是简单的链接库。 CMake 的很大一部分是在链接时传播库属性。就用那个吧。


此外,如果您决定将 STATIC 库转换为 SHARED,则使用 target_link_libraries 不会在此类转换中提供额外的操作。

关于c++ - CMakeList : Dependencies for static libraries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51384947/

相关文章:

c++ - 海量数据分析

c++ - 想用cmake制作独立程序

c++ - 如何构建 Openscenegraph earth 2.6

java - Maven:mvn 编译失败。 "package does not exist"。依赖项包含在 maven 中,其他 SO 解决方案不起作用。我缺少什么?

java - 如何让 Maven 依赖于运行时类路径而不是测试类路径?

c++ - 为什么在函数体内使用 `typename`

c++ - 如何编写自定义断言?

c++ - g++编译器运行错误 “g++: error: spawn: Exec format error”

c++ - CMake 在使用 android-cmake 工具链文件时找不到 Boost 库

java - 如果我的 android 项目依赖于具有其他依赖项的 .jar,我是否必须将这些依赖项包含在我的项目中?