我將描述我的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 - 如果您將您的評論置於答案中,我可以信任你。 –