【问题标题】:CMake app dependency on Qt-based libraryCMake 应用程序依赖于基于 Qt 的库
【发布时间】:2017-02-11 18:06:42
【问题描述】:

我将描述我的 CMake 项目目前是如何安排的。现在还早,所以欢迎提出更好的安排建议。

应用依赖于 Lib1 Lib1 依赖于 Lib2 Lib2使用Qt

文件夹结构:

  • 顶级
    • Lib1
      • Lib2
    • 应用

我在每个级别都有 CMakeLists.txt。

在 Lib1 中,我添加_library (STATIC),然后使用同样是 STATIC 的 Lib2 的 target_link_library。

Lib2 的 CMakeLists.txt 对 Qt5Widgets、Qt5Core 和 Qt5Gui 执行 find_package 调用。

最后,App 的 CMakeLists.txt 为 Lib1 执行 add_executable 和 target_link_libraries。

一切都会编译和链接,直到我真正在 App 代码中调用以使用 Lib2 中的函数。然后我得到一堆未解决的符号链接器错误,指向来自 Lib2 的函数。我是否将 Lib2 设为 OBJECT 库并相应地更改 Lib1 中的链接似乎并不重要。我还尝试将 App 与 Lib1 和 Lib2 链接,结果相同。

我在这里做错了什么?

【问题讨论】:

  • 您需要在 Lib2 上使用 Qt5Widgets、Qt5Core 和 Qt5Gui 来 target_link_libraries。 Find_packages 只是用库位置填充变量。
  • 谢谢!我不知道为什么我错过了。对于其他人阅读,我使用的语法是:target_link_libraries(FrameworkInterfaceLib Qt5::Widgets Qt5::Core Qt5::Gui)
  • mascoj - 如果您将您的评论放入答案中,我可以相信您。
  • 顺便说一句:qt5_use_modules(FrameworkInterfaceLib Widgets Core Gui) 是将 Qt 库链接到目标的另一种方法。

标签: c++ qt cmake


【解决方案1】:

Find_packages 只是用库位置填充变量。

您需要使用 Qt5Widgets、Qt5Core 和 Qt5Gui 对 Lib2 上的 target_link_libraries 进行定位,以便 cmake 可以正确链接它们。

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多