Qt 如何在QMake中使用额外的目标运行多个命令

Qt 如何在QMake中使用额外的目标运行多个命令,qt,qmake,Qt,Qmake,我正在使用qmake创建额外的目标,我试图同时做两件事:创建一个新文件夹,并将dll复制到该文件夹中。两个动作分开很好,但两个一起不起作用 something.target = this # This works: # something.commands = mkdir newFolder # This works too (if newFolder exists) # something.commands = copy /Y someFolder\\file.dll newFold

我正在使用
qmake
创建额外的目标,我试图同时做两件事:创建一个新文件夹,并将dll复制到该文件夹中。两个动作分开很好,但两个一起不起作用

something.target = this

# This works:
# something.commands =   mkdir newFolder
# This works too (if newFolder exists)
# something.commands =   copy /Y someFolder\\file.dll newFolder

# This doesn't work:
something.commands = mkdir newFolder; \
                     copy /Y someFolder\\file.dll newFolder

QMAKE_EXTRA_TARGETS += something
PRE_TARGETDEPS += this
我认为这是正确的语法(我发现了类似的示例,例如和),但我得到了以下错误:

> mkdir newFolder; copy /Y someFolder\\file.dll newFolder
> The syntax of the command is incorrect.

不同平台上的语法是否不同?我使用的是Windows7,Qt5.0.1。

命令变量的值由qmake原样粘贴到Makefile中目标命令的位置。qmake从值中去掉任何空格,并将其更改为单个空格,因此如果没有专用工具,就不可能创建多行值。还有一个工具:函数escape\u expand。试试这个:

something.commands = mkdir newFolder $$escape_expand(\n\t) copy /Y someFolder\\file.dll newFolder

$$escape\u expand(\n\t)
添加新行字符(结束上一个命令),并按照Makefile语法的指示使用制表符启动下一个命令

and操作符在Linux和奇怪的windows上也适用于我

something.commands = mkdir newFolder && copy /Y someFolder\\file.dll newFolder

如果要避免反斜杠,还可以附加到
.commands
变量:

target.commands += mkdir toto
target.commands += && copy ...
# Result will be:
target:
    mkdir toto && copy ...
或:


太棒了,工作起来很有魅力!但出于好奇:其他线程似乎使用
\作为换行符,没有问题。此功能是否依赖于平台?它可能是用于将多个命令合并到一个命令中的特定于shell的功能。例如,在Windows上,&&将使用标准cmd shell。我不太了解unix喜欢shell,所以不能肯定地回答。@SergeySkoblikov:在unix下,
&&
应该也能工作->它在第一个命令之后运行第二个命令,但只有在第一个命令成功完成的情况下才会运行。无论如何,只有
&
将运行第二个命令。在窗户下看起来是一样的吗?
target.commands += mkdir toto;
target.commands += copy ...;
# Result will be:
target:
    mkdir toto; copy ...;