部署通过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 (将#修改为@)