我将描述我的CMake项目当前如何安排。现在很早,所以建议更好的安排。CMake应用程序依赖于基于Qt的库
应用取决于LIB1 LIB1取决于LIB2 LIB2使用Qt
文件夹结构:
- 顶层
- LIB1
- LIB2
- 应用
- LIB1
我的CMakeLists.txt在每个级别。
在Lib1中add_library(静态),然后target_link_library与也是STATIC的Lib2。
Lib2的CMakeLists.txt执行Qt5Widgets,Qt5Core和Qt5Gui的find_package调用。
最后,应用程序的CMakeLists.txt执行add_executable,然后执行lib1的target_link_libraries。
一切都编译和链接,直到我实际上在应用程序代码中使用Lib2中的函数进行调用。然后我得到一堆指向Lib2函数的未解决符号链接器错误。如果我使Lib2成为OBJECT库并相应地更改Lib1中的链接似乎并不重要。我也尝试将App与Lib1和Lib2连接起来,得到相同的结果。
我在这里做错了什么?
您需要使用Qt5Widgets,Qt5Core和Qt5Gui在Lib2上创建target_link_libraries。 Find_packages只是使用库位置填充变量。 – mascoj
谢谢!我不知道为什么我错过了。对于其他人阅读,我使用的语法是: target_link_libraries(FrameworkInterfaceLib Qt5 :: Widgets Qt5 :: Core Qt5 :: Gui) –
mascoj - 如果您将您的评论置于答案中,我可以信任你。 –