c++ - C++中的库链接,三个库之间的依赖

标签 c++ cmake dependencies circular-dependency

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

在我的代码中,我创建了三个库,例如ABC。在库 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/

相关文章:

Spring不会在bean初始化时中止 Bootstrap 启动组件扫描时出错?

c++ - 从进程内 COM 在控制台中打印

自动生成 cmakelists.txt 的 C++ IDE

c++ - 使用 throw_with_nested 并捕获嵌套异常

c++ - 使用原生 CUDA 支持 CMake 在 C++ 目标中获取 CUDA 包含目录?

c++ - CMake 看不到源文件,找不到#includes

java - Intellij/Gradle - 在类路径中看不到 Jar,尽管它存在于模块中

pandas - 在同一台机器上安装 Tensorflow、NumPy 和 Pandas

c++ 将数字的小数部分转换为整数

c++ - C++程序转C后如何查看(如果有)?