私は外部プロジェクトとインポートされた共有ライブラリを持っています。ディレクトリが含まれており、正しくすべての作業を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")
任意のアイデア?
EDIT:今のところ私は、IMPORTED_LOCATIONを引き出すためにGET_PROPERTYを使用して、その後ファイルをインストールし使用して、そのプロパティの値を与えることで、この問題を回避得ています。それは動作するようですが、より良い、よりイディオム的な - cmakeの解決策はありますか?
'rpath'は実際には非常に簡単にELFバイナリに変更することができるいくつかのプロパティの一つです https://nixos.org/patchelf.html – curlybracket
(TARGET)をインストールここで説明されていない一つの有用な性質を持っています。 .soから .soへのリンクも作成されます。 および .so。 。 Unixライクなシステムではです。 –