Как запустить несколько команд с дополнительной целью в 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
Я думал, что это правильный синтаксис (я нашел похожие примеры, например здесь и здесь), но я получаю следующую ошибку:
> mkdir newFolder; copy /Y someFolder\\file.dll newFolder
> The syntax of the command is incorrect.
Является ли синтаксис другим на разных платформах или чем-то еще? Я работаю над Windows 7 с Qt 5.0.1.
Ответы
Ответ 1
Значение переменной .commands
вставляется в место целевых команд в Makefile с помощью qmake как есть. qmake удаляет любые пробелы из значений и изменяет их на отдельные пространства, поэтому невозможно создать многострочное значение без специального инструмента. И есть инструмент: function escape_expand. Попробуй это:
something.commands = mkdir newFolder $$escape_expand(\n\t) copy /Y someFolder\\file.dll newFolder
$$escape_expand(\n\t)
добавляет новый символ линии (заканчивает предыдущую команду) и запускает следующую команду с символом табуляции, который диктует синтаксис Makefile.
Ответ 2
Оператор и работает также для меня в Linux и странных окнах.
something.commands = mkdir newFolder && copy /Y someFolder\\file.dll newFolder