2016-10-03 101 views
0

我将描述我的CMake项目当前如何安排。现在很早,所以建议更好的安排。CMake应用程序依赖于基于Qt的库

应用取决于LIB1 LIB1取决于LIB2 LIB2使用Qt

文件夹结构:

  • 顶层
    • LIB1
      • LIB2
    • 应用

我的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连接起来,得到相同的结果。

我在这里做错了什么?

+1

您需要使用Qt5Widgets,Qt5Core和Qt5Gui在Lib2上创建target_link_libraries。 Find_packages只是使用库位置填充变量。 – mascoj

+1

谢谢!我不知道为什么我错过了。对于其他人阅读,我使用的语法是: target_link_libraries(FrameworkInterfaceLib Qt5 :: Widgets Qt5 :: Core Qt5 :: Gui) –

+1

mascoj - 如果您将您的评论置于答案中,我可以信任你。 –

回答

1

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

您需要使用Qt5Widgets,Qt5Core和Qt5Gui在Lib2上创建target_link_libraries,这样cmake才能正确地链接它们。

相关问题