2016-10-03 47 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才能正確地鏈接它們。

相關問題