我正在使用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
我认为这是正确的语法(我找到了类似示例here和here),但我收到以下错误:
> mkdir newFolder; copy /Y someFolder\\file.dll newFolder
> The syntax of the command is incorrect.
不同平台上的语法是否有所不同?我正在使用Qt 5.0.1开发Windows 7。
答案 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 ...;