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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...