首页 > 解决方案 > 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 和视觉工作室的知识,但显然我还有很长的路要走。

标签: opencvcmakevisual-studio-2017dependenciesstatic-libraries

解决方案


您可以尝试将您的第一个target_link_libraries呼叫改为使用PUBLIC。这将确保将 OpenCV 库添加到 的链接接口A,并且对它们的访问将传播到传递依赖项。

target_link_libraries(A PUBLIC ${OpenCV_LIBRARIES})

推荐阅读