我正在研究一個主項目,有幾個第三方庫。爲了清晰起見,我的目標是將所有這些導入導入目標,但我無法讓其工作。它基本上是一組靜態庫(.lib/lib .a)及其頭文件。通過導入的目標將靜態庫鏈接到主項目
爲了討論起見,Main是主要目標,第三個是進口第三方。
我設法在Windows上生成一個合適的Visual Studio解決方案,但是在Linux上沒有按照預期工作。當構建解決方案,我結束了這個錯誤:
"No rule to make target 'Third-NOTFOUND', needed by '../Bin/Main'"
下面是我的CMakeLists.txt的一些代碼段。
主要的的CMakeLists.txt:
project(Main)
[...]
add_subdirectory(ThirdParty/Third)
set_property(TARGET Third PROPERTY FOLDER "thirdparty")
[...]
add_executable(Main ${SOURCES})
target_link_libraries(Main PRIVATE Third)
第三的的CMakeLists.txt:
project(Third)
[...]
# Helper function
function(append_lib target lib_debug_dir lib_release_dir name)
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_DEBUG "${lib_debug_dir}/${LIB_NAME}")
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_RELEASE "${lib_release_dir}/${LIB_NAME}")
endfunction()
[...]
add_library(Third STATIC IMPORTED GLOBAL)
set_property(TARGET Third APPEND PROPERTY PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIR}")
append_lib(Third ${LIB_DIR_DEBUG} ${LIB_DIR_RELEASE} libMyLib1.a)
注:Linux和Windows的代碼是一樣的,除了靜態庫它自己的名字( MyLib1.lib替換libMyLib1.a)
我在做什麼錯?謝謝:)
這是路徑問題嗎?這個答案是否適用於你:http://stackoverflow.com/questions/14077611/how-do-i-tell-cmake-to-link-in-a-static-library-in-the-source-directory –
I不這麼認爲。我剛剛檢查過,這些都是正確的絕對路徑。 –
如果你檢查生成的Makefile,你會看到那裏的絕對路徑嗎? –