I have an external project and an imported shared library. The include directories and implib all work correctly, but trying to install the shared library (dll) fails with the following error:
install TARGETS given target "my_shared_lib" which does not exist in this directory.
Here's code to reproduce:
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")
Any ideas?
EDIT: For now I've gotten around this problem by using get_property to pull out the IMPORTED_LOCATION, then using INSTALL FILES and giving the value of that property. It seems to work, but is there a better, more idiomatic-cmake solution?