opencv - Visual Studio 2017 自动链接依赖的依赖
问题描述
我有库 A,它依赖于 OpenCV。我有可执行文件 B,它依赖于库 A。在我的 cmake 中使用以下行,我可以将 A 链接到 B,而无需将 OpenCV 链接到 B:
add_library(A STATIC ${A_src})
set_target_properties(A PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_include_directories(A PUBLIC include ${OpenCV_INCLUDE_DIRS})
target_link_libraries(A PRIVATE ${OpenCV_LIBRARIES})
add_executable(B src/driver.cpp)
target_link_libraries(B PRIVATE A)
伟大的。现在,我有程序 C,它是预先制作的,可以在没有 cmake 的 Visual Studio 2017 中运行。我已将与 A 关联的包含目录、库目录和 .lib 文件添加到我的 C 解决方案的属性中。但是,C 无法构建,因为它找不到 OpenCV。
虽然将 C 链接到 OpenCV 很容易,但我不明白为什么必须这样做。我知道 C 必须能够链接到 A 而无需链接到 OpenCV,因为我使用 B 完成了它。但是,我不确定如何使用 Visual Studio 复制它。
如果有人可以帮助向我解释我做错了什么,我将不胜感激。在过去的几周里,我学到了很多关于 cmake 和视觉工作室的知识,但显然我还有很长的路要走。
解决方案
您可以尝试将您的第一个target_link_libraries
呼叫改为使用PUBLIC
。这将确保将 OpenCV 库添加到 的链接接口A
,并且对它们的访问将传播到传递依赖项。
target_link_libraries(A PUBLIC ${OpenCV_LIBRARIES})
推荐阅读
- c# - Unity 3D - 如何在僵尸全部死后重生?
- javascript - 根据特定比例准确修复滑动?CSS/JS
- c# - 从链接下载 pdf 文件
- haskell - seq 在 Haskell 中实际上做了什么?
- python - Python Pymem MemoryReadError
- postgresql - 如何计算多个表中外键的出现次数
- org-mode - 为什么 Hugo 不将小写西里尔字母 Kha 呈现为代码?
- spring-boot - Hibernate - Spring - ConstraintViolationException - UniqueConstraint
- mysql - 如何通过 Shell 在 MySQL 中升级?
- c - 分配了 strcat char* 的分段错误