Visual Studio 2017自动链接依赖关系的依赖关系

时间:2019-08-19 19:47:42

标签: opencv cmake visual-studio-2017 dependencies static-libraries

我有一个库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,它是预先制作的,可以在Visual Studio 2017中运行而无需cmake。我已将与A关联的include目录,库目录和.lib文件添加到我的C解决方案的属性中。但是,C无法构建,因为它找不到OpenCV。

虽然将C链接到OpenCV很容易,但是我不明白为什么要这么做。我知道C必须能够链接到A而不需要链接到OpenCV,因为我是用B完成的。但是,我不确定如何用Visual Studio复制它。

如果有人能帮助我解释我做错了什么,我将非常感谢。过去几周,我已经学到了很多有关cmake和visual studio的知识,但是显然我还有路要走。

1 个答案:

答案 0 :(得分:0)

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

target_link_libraries(A PUBLIC ${OpenCV_LIBRARIES})