【问题标题】:Visual Studio 2017 Automatically Link Dependencies of DependenciesVisual Studio 2017 自动链接依赖的依赖
【发布时间】:2019-08-19 19:47:42
【问题描述】:

我有库 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 和 Visual Studio 的知识,但显然我还有很长的路要走。

【问题讨论】:

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


    【解决方案1】:

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

    target_link_libraries(A PUBLIC ${OpenCV_LIBRARIES})
    

    【讨论】:

    • 不幸的是,这对我不起作用。还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2017-06-14
    • 2018-06-13
    • 2021-12-27
    相关资源
    最近更新 更多