首页 > 解决方案 > C++中的库链接,三个库之间的依赖关系

问题描述

对于某人来说,这可能是一个奇怪/初学者的问题。但是我有以下情况。

在我的代码中,我正在创建三个库,比如说ABC。在库 B 中,我正在链接库 A,因此类似于target_link_libraries(... A).

我的 C 库正在链接 B。所以我有: B -> A C -> B.

那么是否有可能,我使用方法,枚举库 A 中定义的任何内容也在 C 中?虽然 C 没有明确链接 A?我在 C 中使用库 A 中定义的枚举,A::someClass::someEnum它编译并显示了正确的值条目。

标签: c++cmakedependenciescircular-dependency

解决方案


那么是否有可能,我使用方法,枚举库 A 中定义的任何内容也在 C 中?

您的 C 库是否使用这些方法/枚举/等。通过包含来自库 A 或库 B 的标题?

如果 C直接包含来自库 A 的头文件,那么它应该显式地与库 A 链接:

# A is a private linkage of B.
target_link_libraries(B PRIVATE A)
# C needs to be linked with A
target_link_libraries(C B A)

如果 C 包含来自库 B 的头文件,而后者又包含来自库 A 的头文件,则 A 库应该是 B接口的一部分:

# B links with A and this linkage is an interface of B
target_link_libraries(B PUBLIC A)
# C may link with B only
target_link_libraries(C B)

这些方法假定使用“现代”(面向目标的)CMake。但是使用这些方法可以获得最具可扩展性的解决方案。


推荐阅读