Ich habe ein externes Projekt und eine importierte gemeinsame Bibliothek. Die Include-Verzeichnisse und IMPLIB alle Arbeiten korrekt, sondern versuchen, die gemeinsame Bibliothek (DLL) zu installieren, schlägt mit dem folgenden Fehler:Kann ich eine gemeinsam genutzte importierte Bibliothek installieren?
install TARGETS given target "my_shared_lib" which does not exist in this directory.
Hier Code zu reproduzieren:
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")
Irgendwelche Ideen?
EDIT: Für jetzt habe ich, dann FILES und den Wert dieser Eigenschaft geben mit INSTALL unter Verwendung GET_PROPERTY ziehen Sie die IMPORTED_LOCATION, um dieses Problem bekommen. Es scheint zu funktionieren, aber gibt es eine bessere, idiomatische-cmake-Lösung?
'rpath' ist tatsächlich eine der wenigen Eigenschaften, die ganz leicht in elf Binärdateien verändert werden können https://nixos.org/patchelf.html – curlybracket
installieren (TARGET) hat eine nützliche Eigenschaft hier nicht behandelt. Es erstellt auch die Links von .so zu .so. und .so. . auf Unix-ähnlichen Systemen. –