QMAKE/Qt5 支持德语变音符号的跨平台文件复制方案问询
适配德语变音符号的QMAKE跨平台文件复制实现
Qt 5.8版本中$$QMAKE_COPY在Windows下默认解析为copy命令,存在多字节字符编码兼容问题,直接自定义分平台的复制逻辑是最稳定的解决方案,Windows侧沿用你验证过的xcopy保证德语变音符号支持,类Unix系统用原生支持UTF-8路径的cp命令即可:
# 自定义跨平台复制函数,自动适配不同系统的命令格式 defineReplace(cross_platform_copy) { win32 { # Windows下使用xcopy,/Y参数跳过覆盖确认,自动转成Windows风格路径 return($$quote(xcopy /Y $$system_path($$1) $$system_path($$2))) } else { # 类Unix(macOS/Linux)下使用cp,-f参数强制覆盖已存在文件 return($$quote(cp -f $$1 $$2)) } } # Release构建执行复制逻辑 win32:build_pass:CONFIG(release, debug|release) { SOURCE = $$absolute_path($$OUT_PWD/release/$${TARGET}.exe) DEST = $$absolute_path($$OUT_PWD/../$${TARGET}/.compiledOutput/) QMAKE_POST_LINK += $$cross_platform_copy($$SOURCE, $$DEST) } # 非Windows平台的复制逻辑可直接复用上述函数扩展 unix:!macx:build_pass:CONFIG(release, debug|release) { SOURCE = $$absolute_path($$OUT_PWD/$${TARGET}) DEST = $$absolute_path($$OUT_PWD/../$${TARGET}/.compiledOutput/) QMAKE_POST_LINK += $$cross_platform_copy($$SOURCE, $$DEST) } macx:build_pass:CONFIG(release, debug|release) { SOURCE = $$absolute_path($$OUT_PWD/$${TARGET}.app) DEST = $$absolute_path($$OUT_PWD/../$${TARGET}/.compiledOutput/) # 复制.app目录需要新增递归参数,单独调整即可 QMAKE_POST_LINK += $$quote(cp -rf $$SOURCE $$DEST) }
方案说明
- 完全兼容Qt 5.8版本的QMAKE语法,无需依赖高版本新增特性
- Windows侧保留
xcopy命令的使用,完全解决德语变音符号等特殊字符路径的复制问题 - 类Unix系统的
cp命令原生支持UTF-8编码路径,不存在特殊字符兼容性问题 - 如需复制目录,只需在对应平台的命令中新增递归参数即可:Windows侧加
/E,类Unix侧加-r
内容的提问来源于stack exchange,提问作者Taneeda
相关产品推荐
相关产品推荐

