【发布时间】:2018-07-17 15:15:10
【问题描述】:
假设我们有两个独立的静态库:
################################################
# 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}
)
【问题讨论】:
-
第二个更好,因为有一天你可以将
Logger切换到共享库中,除了切换库类型之外不会有任何问题。您所说的冗余不会让您付出任何代价。
标签: c++ cmake dependencies static-libraries