CMake列表wxWidgets Dll并在安装

时间:2017-01-26 14:10:04

标签: cmake wxwidgets

cmake脚本FindwxWidgets创建所有.lib文件的列表。

但是,此脚本不提供wxWidgets dll列表。

什么是用于调试和发布目标的所有wxWidgets Dll文件列表中的CMake脚本?

ps:我发现了一些基于wxWidgets和CMake的项目,但它们都与wxWidgets静态链接。

正在进行的工作:

当前的脏解决方案是获取wxWidgets目录中的所有dll并安装在与exe相同的文件夹中。但是,对于已使用的组件没有过滤器,因为它没有与find_package命令链接。

# Copy wxWidgets Dll's # extract folder path
file(GLOB wxwidgets_dlls "${wxWidgets_LIB_DIR}/*.dll") list(APPEND WXWidgets_DLL_Slash "") foreach(WXWidgets_DLL ${wxwidgets_dlls}) # Check if dll does not contain "ud" for debug dll get_filename_component(DLL_FILENAME ${WXWidgets_DLL} NAME_WE) string(FIND ${DLL_FILENAME} "ud" debug_annot) if(${debug_annot} LESS 0) string(REPLACE "\\" "/" WXWidgets_DLL ${WXWidgets_DLL}) MESSAGE(STATUS "Install ${WXWidgets_DLL}") list(APPEND WXWidgets_DLL_Slash ${WXWidgets_DLL}) endif() endforeach(WXWidgets_DLL)
install(FILES ${WXWidgets_DLL_Slash} DESTINATION .)

1 个答案:

答案 0 :(得分:1)

以下是我与CPack一起使用的what示例。它将使用.exe / dumpbin分析readelf以查找要复制的库。

我的脚本也会尝试去除生成的DLL(如果需要,可以删除该部分)。在<{1}}命令之后插入

您可能需要调整的事项(小心,它们将在安装时间之前扩展):

  • install(TARGETS ...) - RUNTIME_DIR的子目录,其中安装了bin.exe个文件
  • .dll - 没有EXECUTABLE_NAME
  • 的目标名称
  • .exe的第三个参数 - 其fixup_bundle,但您可能需要将其更改为\"\"(复制dll的目录)
\"${wxWidgets_LIB_DIR}\"

更新:install(CODE " include(BundleUtilities) fixup_bundle(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${RUNTIME_DIR}/${EXECUTABLE_NAME}${CMAKE_EXECUTABLE_SUFFIX}\" \"\" \"\") file(GLOB dynamic_libs \"\${CMAKE_INSTALL_PREFIX}/${RUNTIME_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}*\") message(STATUS \"GLOB: \${dynamic_libs}\") foreach(dll IN LISTS dynamic_libs) if(\"${CMAKE_STRIP}\") execute_process(COMMAND ${CMAKE_STRIP} \"-s\" \${dll}) endif() endforeach(dll) ") 将字符串中的命令逐字添加到install(CODE ...)文件中,因此不会展开生成器表达式。 有用变量的数量也非常有限,例如我的示例中的cmake_install.cmake${CMAKE_INSTALL_PREFIX}内扩展,但cmake_install.cmake应该在进入之前进行扩展。

您可以尝试使用${CMAKE_SHARED_LIBRARY_SUFFIX} / ${PROJECT_BINARY_DIR}手动创建\${CMAKE_INSTALL_PREFIX}的完整路径。