如何解决部署通过PkgConfigCMake找到的目标Dll
我发现PkgConfig
毫无用处,因为不可能自动获取并复制目标的dll进行部署。
对于一般目标(由我自己创建)并通过find_package
导入,可以使用get_link_libraries(LIBS TARGET)
获取库。与get_target_property(TYPE lib TYPE)
结合使用,可以推断出dll(SHARED_LIBRARY
),然后进行部署。
通过PkgConfig目标导入时,这些方法不起作用。而且我看不到该怎么做。
示例:
find_package(PkgConfig REQUIRED)
pkg_search_module(SDL2
REQUIRED sdl2 sdl
IMPORTED_TARGET)
if(TARGET PkgConfig::SDL2)
message(STATUS "Found SDL2")
endif()
add_executable(JoySDL
joyTest.cpp)
target_link_libraries(JoySDL PRIVATE PkgConfig::SDL2)
让我们看一下几种变体:
- 使用
$<TARGET_FILE:TARGET>
# yields Target "PkgConfig::SDL2" is not an executable or library.
add_custom_command(TARGET JoySDL PRE_LINK
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:PkgCOnfig::SDL2> $<TARGET_FILE_DIR:JoySDL>
)
- 使用
${SDL2_LIBRARIES}
会产生一条消息:
Error copying file (if different) from "mingw32" to "C:/dev/builds/UWCASdk/Debug-MinGW32/Sandbox/JoySDL/bin".
Error copying file (if different) from "SDL2main" to "C:/dev/builds/UWCASdk/Debug-MinGW32/Sandbox/JoySDL/bin".
Error copying file (if different) from "SDL2" to "C:/dev/builds/UWCASdk/Debug-MinGW32/Sandbox/JoySDL/bin".
- 使用
${SDL2_LINK_LIBRARIES}
将复制我们不需要的静态库,在这种特殊情况下:
Error copying file (if different) from "mingw32" to "C:/dev/builds/UWCASdk/Debug-MinGW32/Sandbox/JoySDL/bin".
是否可以获取用于部署的dll列表?或任何解决方法?还是PkgConfig在使用CMake部署时真的没用吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。