c++ - C++中的库链接,三个库之间的依赖关系
问题描述
对于某人来说,这可能是一个奇怪/初学者的问题。但是我有以下情况。
在我的代码中,我正在创建三个库,比如说A、B和C。在库 B 中,我正在链接库 A,因此类似于target_link_libraries(... A)
.
我的 C 库正在链接 B。所以我有:
B -> A
C -> B
.
那么是否有可能,我使用方法,枚举库 A 中定义的任何内容也在 C 中?虽然 C 没有明确链接 A?我在 C 中使用库 A 中定义的枚举,A::someClass::someEnum
它编译并显示了正确的值条目。
解决方案
那么是否有可能,我使用方法,枚举库 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。但是使用这些方法可以获得最具可扩展性的解决方案。
推荐阅读
- php - 在我的 laravel 应用程序中单击博客文章上的显示更多按钮时,如何通过其 ID 显示特定的博客文章?
- ansible-awx - 在 Docker AWX 上安装 pynetbox
- python - 如何在tkinter中指定多个按钮的排列位置
- r - 决策树的“train”函数在选择最佳调谐时如何工作?
- database - Delphi 7在AdoQuery插入请求后获取身份
- regex - 在正则表达式中排除网站图标
- python - 如何在电话号码中添加括号?
- postgresql - 过程和触发器 postgresql 添加一个条件,只在一行上做,而不是全部
- python - catboost中用户定义的损失函数的学习曲线?(model.eval_metric_ 为空)
- vb.net - 从任务栏图标最小化和最大化程序时出现问题