使用CPack与windeployqt制作安装包时可执行文件未打包问题求助
问题根因
你的CMake配置缺失了可执行文件的安装规则,同时windeployqt的--dir参数仅会将程序运行依赖的Qt库、资源文件输出到指定目录,不会自动拷贝你传入的目标exe本身,所以打包时只有qtDeploy目录下的依赖文件被打包,exe始终留在构建根目录。
两种修复方案任选其一即可
方案1:新增可执行文件的安装规则
在Windows分支内的install(DIRECTORY "${CMAKE_BINARY_DIR}/qtDeploy/" ...)代码段下方,新增如下install指令,直接将编译生成的可执行文件加入安装打包路径:
install(TARGETS translationVerification DESTINATION . )
方案2:在POST_BUILD阶段将exe拷贝到qtDeploy目录
修改现有的POST_BUILD自定义命令,新增一行拷贝指令,把生成的exe和依赖一起放到qtDeploy目录下,这样原来的install qtDeploy的规则就会把exe一起打包:
add_custom_command(TARGET translationVerification POST_BUILD COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/qtDeploy/" # 新增以下这行拷贝指令 COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_FILE:translationVerification> "${CMAKE_CURRENT_BINARY_DIR}/qtDeploy/" COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" --verbose 0 --no-compiler-runtime --no-angle --no-webkit2 --no-quick-import --no-translations --dir "${CMAKE_CURRENT_BINARY_DIR}/qtDeploy/" $<TARGET_FILE:translationVerification> COMMENT "Deploying Qt..." )
额外小问题修复
你当前配置里set(CPACK_NSIS_DISPLAY_NAME ${CMAKE_PACKAGE_NAME})引用了未定义的变量CMAKE_PACKAGE_NAME,需要改成${CPACK_PACKAGE_NAME},否则NSIS安装包的显示名称会为空。
内容的提问来源于stack exchange,提问作者pennyBoy
相关产品推荐
相关产品推荐

