2013-08-05 10 views
11

Tworzę dodatkowe cele przy użyciu qmake, a ja próbuję wykonać dwie rzeczy w tym samym czasie: utworzyć nowy folder i skopiować dll do tego folderu. Oba działania działają oddzielnie, ale oba nie działają.Jak uruchomić wiele poleceń z dodatkowym celem w QMake

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 

myślałem, że to była właściwa składnia (znalazłem podobnych przykładów na przykład here i here), ale otrzymuję następujący błąd:

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

jest składnia różne na różnych platformach lub coś ? Pracuję w systemie Windows 7, z Qt 5.0.1.

Odpowiedz

16

Wartość zmiennej .commands jest wklejana w miejsce poleceń docelowych w pliku Makefile przez qmake bez zmian. qmake usuwa wszelkie spacje z wartości i zmienia je w pojedyncze spacje, więc niemożliwe jest utworzenie wartości wielowierszowej bez specjalnego narzędzia. Jest też narzędzie: function escape_expand. Spróbuj tego:

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

$$escape_expand(\n\t) dodaje znak nowego wiersza (kończy poprzednie polecenie) i rozpoczyna następną komendę ze znaku tabulacji jako Makefile nakazów składniowych.

+0

Fantastyczny, działa jak urok! Ale z ciekawości: czy istnieje powód, że inne wątki wydają się używać "; \ "jako przerwa linii bez problemu. Czy ta platforma jest zależna? – Yellow

+0

Może to być specyficzna dla powłoki funkcja łączenia wielu poleceń w jedną. W Windowsie i & działa na przykład ze standardową powłoką cmd. Nie znam skorup typu unix wystarczająco dobrze, by odpowiedzieć z pewnością. –

+0

@SergeySkoblikov: W systemie Unix '&&' powinno działać również -> uruchamia drugie polecenie po pierwszym, ale tylko w przypadku, gdy pierwszy został pomyślnie zakończony. Tylko '&' uruchomi drugie polecenie. Wydaje się być taki sam pod oknami? – mozzbozz

3

Operator i działa również dla mnie na Linuksie i dziwnie windows.

Powiązane problemy