Hi,
Let’s have a cross-platform command-line test application TestApp. This app depends on OpenCV, built as a dynamic framework on Apple. To install the app and runtime dependencies, I have:
install(TARGETS TestApp
RUNTIME_DEPENDENCY_SET TestAppDeps
DESTINATION "$<TARGET_FILE_DIR:TestApp>"
)
install(IMPORTED_RUNTIME_ARTIFACTS
RUNTIME_DEPENDENCY_SET TestAppDeps
DESTINATION "$<TARGET_FILE_DIR:TestApp>"
)
install(RUNTIME_DEPENDENCY_SET TestAppDeps
DESTINATION "$<TARGET_FILE_DIR:TestApp>"
PRE_EXCLUDE_REGEXES
[=[api-ms-]=]
[=[ext-ms-]=]
POST_EXCLUDE_REGEXES
[=[.*(\\|/)system32(\\|/).*\.dll]=]
[=[^/(lib|usr/lib|usr/local/lib)]=]
"$<TARGET_FILE_DIR:TestApp>"
DIRECTORIES
"$<TARGET_FILE_DIR:opencv_core>"
)
When running cmake install, I’m getting the following error:
CMake Error at TestApp/cmake_install.cmake:140 (file):
file Could not resolve runtime dependencies:
@rpath/opencv2.framework/Versions/4.0.1/opencv2
Looking at TestApp/cmake_install.cmake, I can see that the opencv_core target directory is obviously “too deep” into the opencv2.framework directory structure:
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$")
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR _CMAKE_DEPS
EXECUTABLES
"/Users/<user>/Documents/TestApp/build_arm64_osx/TestApp/Release/TestApp"
DIRECTORIES
"/Users/<user>/Documents/Dependencies/macOS/arm64/OpenCV_4.0.1/lib/3rdparty/opencv2.framework/Versions/4.0.1"
PRE_EXCLUDE_REGEXES
"api-ms-"
"ext-ms-"
POST_EXCLUDE_REGEXES
".*(\\\\|/)system32(\\\\|/).*\\.dll"
"^/(lib|usr/lib|usr/local/lib)"
"/Users/<user>/Documents/TestApp/build_arm64_osx/TestApp/Release"
)
Is there a target or framework property, defining the root path of the framework, that I should use to give the DIRECTORIES argument the correct search path? In the above example, it should be two levels upper, i.e. omitting the Versions/4.0.1 part of the path.
Thanks.