2014-06-29 16 views
6

QtCreator ve Qt 5.3 kullanarak Windows, Linux ve OS X üzerinde oluşturması gereken bir uygulama geliştiriyorum. Tüm dosyaları ve alt klasörleri bir klasörden çıktı klasörüne kopyalamak istiyorum. Linux ve OS X için çalışıyorum ama Windows için değil. İşte .pro dosyasının ilgili bölümü:qmake komut dosyalarını ve klasörleri çıkış dizinine kopyalamak için komut

win32 { 
    PWD_WIN = $${PWD} 
    DESTDIR_WIN = $${OUT_PWD} 
    copyfiles.commands = $$quote(cmd /c xcopy /S /I $${PWD_WIN}\copy_to_output $${DESTDIR_WIN}) 
} 
macx { 
    copyfiles.commands = cp -r $$PWD/copy_to_output/* $$OUT_PWD 
} 
linux { 
    copyfiles.commands = cp -r $$PWD/copy_to_output/* $$OUT_PWD 
} 
QMAKE_EXTRA_TARGETS += copyfiles 
POST_TARGETDEPS += copyfiles 

Windows'ta aldığım hata "Geçersiz parametre sayısı" dır.

cevap

10

message($${PWD}) ile $${PWD} değişkenine bakarsanız, Windows'ta bile dizin ayırıcı olarak / görürsünüz.

PWD_WIN = $${PWD} 
DESTDIR_WIN = $${OUT_PWD} 
PWD_WIN ~= s,/,\\,g 
DESTDIR_WIN ~= s,/,\\,g 

copyfiles.commands = $$quote(cmd /c xcopy /S /I $${PWD_WIN}\\copy_to_output $${DESTDIR_WIN}) 

QMAKE_EXTRA_TARGETS += copyfiles 
POST_TARGETDEPS += copyfiles 
+1

bunu her zaman yapmak istiyorsanız, komutları xcopy da/Y eklemeniz gerekir. Aksi takdirde asılacaktır. (/ Y - Varolan bir hedef dosyanın üzerine yazmak istediğinizi onaylama isteğini bastırır). – miro

2

Building @Murat's answer kapalı, Qt aslında has built-in functions yerel sistemin tercihine dosyayolu dönüştürmek için: Sen yerli dizin seperatörü dönüştürmek zorundayız. $$shell_path($$clean_path(<your path>)) veya $$clean_path() Linux tarzı bölücülere geri bölücüler dönüştürür:

$$shell_path(<your path>) //Converts to OS path divider preference. 
$$clean_path(<your path>) //Removes duplicate dividers. 

Çağrı o gibi.

Bu Windows üzerinde benim için çalışıyor:

#For our copy command, we neeed to fix the filepaths to use Windows-style path dividers. 
SHADER_SOURCE_PATH = $$shell_path($$clean_path("$${SOURCE_ROOT}\\Engine\\Shaders\\")) 
SHADER_DESTINATION = $$shell_path($$clean_path("$${PROJECT_BIN}\\Shaders\\")) 

#Create a command, using the 'cmd' command line and Window's 'xcopy', to copy our shaders folder 
#into the Game/Bin/Shaders/ directory. 
CopyShaders.commands = $$quote(cmd /c xcopy /Y /S /I $${SHADER_SOURCE_PATH} $${SHADER_DESTINATION}) 

#Add the command to Qt. 
QMAKE_EXTRA_TARGETS += CopyShaders 
POST_TARGETDEPS += CopyShaders 
İlgili konular