假设我们有两个独立项目的静态库:
################################################
# 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/