2017-04-04 37 views
0

我試圖讓一些簡單的CMake和我遇到問題。CMake應用程序和DLL都鏈接到相同的靜態庫?

我有一個應用程序需要鏈接到一個DLL本身鏈接到一個靜態庫。每個模塊都有自己的CMakeLists.txt文件存放在它自己的文件夾中。我使用add_subdirectory()來構建項目層次結構,以便add_subdirectory()將靜態庫(和鏈接添加到靜態)添加到應用程序中,並使用add_subdirectory()添加到DLL項目中。

現在,問題是,在最終的項目中,CMake使得應用程序鏈接到DLL和靜態庫,儘管我明確要求它在CMakeLists.txt文件中只鏈接到DLL。很明顯,我不希望應用程序鏈接到靜態,如果DLL已經這樣做。

我懷疑它與add_subdirectory()有關,但我看不出如何解決這個問題。有人能指點我做錯了什麼嗎?

回答

0

默認情況下,「庫1」到「庫2」的鏈接是向「庫1」(例如,應用程序)的所有用戶傳播。只要「library2」爲SHAREDSTATIC即可完成此操作。

對於剿聯動傳播使用PRIVATE鏈接:

target_link_libraries(library1 PRIVATE library2) 
+0

謝謝!我會嘗試一下,並驗證它的工作,儘快接受你的答案。 (Afk現在) – bitwise

+0

完美!這正是我需要的。 – bitwise

相關問題