对于某人来说,这可能是一个奇怪的/初学者的问题。但是我有以下情况。
在我的代码中,我创建了三个库,例如A、B和C。在库 B 中,我正在链接库 A,因此类似于 target_link_libraries(... A)
。
我的 C 库正在链接 B。所以我有:
B -> A
C -> B
。
那么我是否可以在 C 中使用库 A 中定义的方法、枚举?虽然 C 没有明确链接 A?我在 C 中使用库 A 中定义的枚举,A::someClass::someEnum
并编译并显示正确的值条目。
最佳答案
Should it then be possible, that I use methods, enums whatever defined in library A also in C?
您的 C 库是否使用这些方法/枚举/等。通过包含来自库 A 或库 B 的 header ?
如果 C 直接包含来自库 A 的 header ,那么它应该显式与库 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 中的 header ,而库 B 又包含库 A 中的 header ,则 A 库应该是 B 接口(interface)的一部分:
# 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。但使用这些方法将获得最具可扩展性的解决方案。
关于c++ - C++中的库链接,三个库之间的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60742485/