16

を使用して追加のターゲットを作成qmakeしています。同時に 2 つのことを実行しようとしています: 新しいフォルダーを作成し、そのフォルダーに dll をコピーします。両方のアクションは別々に機能しますが、2 つを一緒に使用すると機能しません。

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で作業しています。

4

3 に答える 3

25

変数の値は.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)改行文字を追加し (前のコマンドを終了します)、次のコマンドを 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 に答える