我想鏈接到使用CMake的共享庫。我知道這可以通過使用target_link_libraries()命令來實現。我已經能夠得到這個工作,但不是我想要的方式。如何使用CMake指定在哪裏查找共享庫?
使用下面的CMakeLists.txt,我已經能夠鏈接到共享庫。
cmake_minimum_required(VERSION 3.7)
project(DylibTest)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})
target_link_libraries(DylibTest
${CMAKE_SOURCE_DIR}/Resources/libDynamicTest.dylib)
這似乎告訴鏈接器查看該項目所在的目錄。這對開發很好,但我將如何分發此項目?最終用戶顯然不會擁有這個相同的文件夾。
我試過在一個相對路徑來傳遞,像這樣:
cmake_minimum_required(VERSION 3.7)
project(DylibTest)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})
target_link_libraries(DylibTest /Resources/libDynamicTest.dylib)
做這件事時,我得到以下錯誤:
No rule to make target `/Resources/libDynamicTest.dylib', needed by `DylibTest'. Stop.
我看過的target_link_directories文檔()但它沒有幫助。我也看了很多其他的問題。
如果不清楚,我的意圖是將可執行文件分發到名爲「Resources」的文件夾中,該文件夾包含共享庫。我的CMakeLists.txt文件應該如何查看才能執行此操作?
編輯:在回答這個問題被標記爲可能的重複的this question,我不承認,這個問題基本上是問同樣的事情,答案有沒有爲我工作。
這裏是我的CMakeLists.txt外觀上的其他問題想要一個公認的答案後:
cmake_minimum_required(VERSION 3.7)
project(DylibTest)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})
link_directories(${CMAKE_BINARY_DIR}/Resources)
target_link_libraries(DylibTest DynamicTest)
這不幸的是不會在一個錯誤,指出圖書館找不到工作的結果。
這個鏈接庫。 'find_library'也會爲你添加'.dylib'後綴,讓你的構建更加便攜。除了CMake變量,您還可以使用環境變量作爲庫位置的提示,這非常方便,特別是如果同一個庫必須被機器上的多個項目使用。但請注意,如果庫是作爲與依賴的可執行文件相同的版本的一部分構建的,則此方法不會*工作,因爲運行CMake時庫文件需要存在。 – ComicSansMS