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

时间:2013-08-05 14:00:25

标签: 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 newFolder

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

QMAKE_EXTRA_TARGETS += something
PRE_TARGETDEPS += this

我认为这是正确的语法(我找到了类似示例herehere),但我收到以下错误:

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

不同平台上的语法是否有所不同?我正在使用Qt 5.0.1开发Windows 7。

3 个答案:

答案 0 :(得分:21)

.commands变量的值通过qmake原样粘贴在Makefile中的目标命令位置。 qmake从值中删除任何空格并将它们更改为单个空格,因此如果没有特殊工具,则无法创建多行值。还有工具:function escape_expand。试试这个:

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

$$escape_expand(\n\t)添加新行字符(结束上一个命令)并使用制表文件语法指示的制表符开始下一个命令。

答案 1 :(得分:4)

and操作符也适用于Linux,奇怪的是Windows。

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

答案 2 :(得分:0)

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

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

或者:

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