【发布时间】:2017-02-11 18:06:42
【问题描述】:
我将描述我的 CMake 项目目前是如何安排的。现在还早,所以欢迎提出更好的安排建议。
应用依赖于 Lib1 Lib1 依赖于 Lib2 Lib2使用Qt
文件夹结构:
- 顶级
- Lib1
- Lib2
- 应用
- Lib1
我在每个级别都有 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 库链接到目标的另一种方法。