我有一個外部項目和一個導入的共享庫。在包括目錄和正確IMPLIB所有的工作,但要安裝的共享庫(DLL)失敗,出現以下錯誤:我可以安裝共享導入的庫嗎?
install TARGETS given target "my_shared_lib" which does not exist in this directory.
這裏的代碼來重現:
add_library(my_shared_lib SHARED IMPORTED GLOBAL)
set_property(TARGET my_shared_lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/ExternalProjects/my_shared_lib")
set_property(TARGET my_shared_lib PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/ExternalProjects/my_shared_lib/my_shared_lib.dll")
set_property(TARGET my_shared_lib PROPERTY IMPORTED_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/ExternalProjects/my_shared_lib/my_shared_lib.lib")
add_executable(main main.cpp)
add_dependencies(main my_shared_lib)
target_link_libraries(main PUBLIC my_shared_lib)
install(TARGETS main DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/DIST")
install(TARGETS my_shared_lib DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/DIST")
任何想法?
編輯:現在我已經解決此問題,通過使用get_property拔出IMPORTED_LOCATION,然後使用安裝文件,並給予該財產的價值得到。它似乎工作,但有沒有更好的,更習慣cmake解決方案?
'rpath'實際上是可以在ELF可執行文件,很容易被修改的幾個屬性之一 https://nixos.org/patchelf.html – curlybracket
安裝在(目標)這裏沒有涉及到一個有用的屬性。它還創建從 .so到 .so的鏈接。 和.so。 。在類Unix系統上的。 –