16

我正在使用 制作额外的目标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.

不同平台上的语法是否不同?我正在使用 Qt 5.0.1 在 Windows 7 上工作。

4

3 回答 3

25

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

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

$$escape_expand(\n\t)添加换行符(结束前一个命令)并按照 Makefile 语法指示使用制表符开始下一个命令。

于 2013-08-08T05:41:01.210 回答
6

and 运算符也适用于我在 Linux 和奇怪的 windows 上。

something.commands = mkdir newFolder && copy /Y someFolder\\file.dll newFolder
于 2015-06-15T18:56:19.140 回答
1

.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 ...;
于 2019-12-18T17:35:24.193 回答