问题描述
我发现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 (将#修改为@)