Сборка ОС: Windows 10, Cmake 3.16.3.
Я использую target_link_libraries, чтобы связать сторонний .lib файл с моей .dll библиотекой.
Но когда я использую GET_RUNTIME_DEPENDENCIES для установки dll, зависимости не обнаружено.
Это происходит только в Windows, установка в Linux в порядке.
Есть ли какие-нибудь подсказки, как решить эту проблему или хотя бы как ее отладить?
Какая именно команда использует CMake в Windows для определения зависимостей?
Я вызываю GET_RUNTIME_DEPENDENCIES так:
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR RES
UNRESOLVED_DEPENDENCIES_VAR UNRES
CONFLICTING_DEPENDENCIES_PREFIX CONFLICTING_DEPENDENCIES
EXECUTABLES ${EXECS}
LIBRARIES ${LIBS} ${MODULES} ${QTPLUGINS_LIBS}
DIRECTORIES ${RUNTIME_DEPENDENCIES_DIRECTORIES}
POST_EXCLUDE_REGEXES ${PLATFORM_POST_EXCLUDE_REGEXES}
)
Где LIBS содержит мой dll, но нет RES нет UNRES содержит путь к 3-му патчу dll.
Ответ 1 · рейтинг 1 · scx
GET_RUNTIME_DEPENDENCIES не знает о ваших переменных времени настройки, поэтому вам нужно указать их вручную. В этом ответе говорится, что вы могу передать переменные на шаг установки, но я пока не смог заставить это работать. К счастью, он поддерживает выражения генератора.
Другая проблема в вашем фрагменте кода заключается в том, что он должен вызываться во время установки. Например, в блоке install(CODE ...).
Итак, имея все это в виду, это должно помочь вам начать.
install(CODE [[
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR RES
UNRESOLVED_DEPENDENCIES_VAR UNRES
CONFLICTING_DEPENDENCIES_PREFIX CONFLICTING_DEPENDENCIES
EXECUTABLES $<TARGET_FILE:your_executable_target_name>
LIBRARIES $<TARGET_FILE:a_lib_target_name>
)
message("\n\nFound dependencies :")
foreach(DEP ${RES})
message("${DEP}")
endforeach()
message("\n\nNot found dependencies :")
foreach(DEP ${UNRES})
message("${DEP}")
endforeach()
]])
Создайте цель установки, чтобы увидеть результаты.
cmake ..
cmake --build . --target install