QMake

2013-08-05 6 views
11

içinde fazladan bir hedefle birden çok komut nasıl çalıştırılır qmake kullanarak fazladan hedefler yapıyorum ve aynı anda iki şeyi yapmaya çalışıyorum: yeni bir klasör oluştur ve bu klasöre bir dll kopyala. Her iki eylem de iyi çalışıyor, ama ikisi birlikte çalışmıyor.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 

Bu doğru sözdizimi (ı örnek here ve here için benzer örnekler bulundu) olduğunu düşündüm, ama aşağıdaki hatayı alıyorum:

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

farklı platformlarda falan sözdizimi farklı mı ? Qt 5.0.1 ile Windows 7 üzerinde çalışıyorum.

cevap

16

.commands değişkeninin değeri, Makefile'deki hedef komutların yerine qmake olarak yapıştırılır. qmake, herhangi bir whitespac değerini değerlerden çıkarır ve bunları tek bir alana dönüştürür, böylece özel bir araç olmadan çok satırlı değer yaratmak imkansızdır. Ve araç var: escape_expand fonksiyonu. Bu deneyin:

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

$$escape_expand(\n\t) yeni satır karakteri (önceki komutu biter) ekler ve Makefile sözdizimi zorunluluk mahiyetinde bir sekme karakteri ile sonraki komutu başlatır.

+0

Fantastik, çekicilik gibi çalışır! Ancak meraktan dolayı: Diğer iş parçacıklarının işe yaraması için bir sebep var; \ 'bir hat kesintisi olmaksızın. Bu platform bağımlı mı? – Yellow

+0

Birden çok komutu bir birine birleştirmek için kabuk özellikli bir özellik olabilir. Windows üzerinde &&, örneğin standart cmd kabuk ile çalışır. Kesinlik ile cevap verecek kadar iyi unix benzeri kabukları bilmiyorum. –

+0

@SergeySkoblikov: Unix altında, '&&' de çalışmalıdır -> ilk komuttan sonra ikinci komutu çalıştırır, ancak ilk durumda başarıyla sonuçlanır. Sadece '&' yine de ikinci komutu çalıştıracaktır. Pencerelerin altında aynı görünüyor mu? – mozzbozz

3

Ayrıca ve işleci de Linux ve garip pencerelerde benim için çalışıyor.

something.commands = mkdir newFolder && copy /Y someFolder\\file.dll newFolder