Qt项目文件中QMAKE_POST_LINK的正确使用及分号问题
QMAKE_POST_LINK追加命令时是否需要在单条命令末尾添加分号
这个现象完全是符合qmake设计预期的正常表现,不是功能异常。
QMAKE_POST_LINK的本质是存储链接完成后待执行shell命令的字符串变量,qmake处理+=追加逻辑时,只会把你写入的内容原样拼接成一整段字符串,最终直接传给系统shell执行,不会自动为多条命令添加分隔标记。- 你手动添加的末尾分号是标准shell的命令分隔符,作用是标记当前命令的结束位置,这个逻辑属于shell语法范畴,和qmake本身的运算符规则无关。
如果不给单条命令末尾加分号,多次+=拼接后最终传给shell的命令串会变成类似如下形式:
mv somefile1.dat /some_location1 mv somefile2.dat /some_location2
shell会把后续的mv关键字、目标路径全部识别为第一条mv命令的多余参数,自然会执行失败,看起来就像Qt没有正确分隔多条后置链接命令。
正确的写法有两种:
- 类Unix平台下直接给每条追加的命令末尾补分号,显式标记命令结束:
QMAKE_POST_LINK += mv somefile1.dat /some_location1; QMAKE_POST_LINK += mv somefile2.dat /some_location2; - 跨平台场景下推荐使用qmake内置的转义函数给每条命令追加换行+制表符前缀,不需要手动写分号,qmake会自动适配不同系统的shell解析规则,兼容性更好:
QMAKE_POST_LINK += mv somefile1.dat /some_location1 $$escape_expand(\n\t) QMAKE_POST_LINK += mv somefile2.dat /some_location2 $$escape_expand(\n\t)
内容的提问来源于stack exchange,提问作者James S
相关产品推荐
相关产品推荐

