2013-02-18 6 views
5

Czy mimo to należy uzyskać ścieżkę stylu okna do katalogu zawierającego .pro lub przekonwertować to, co jest przechowywane w _PRO_FILE_PWD_ na ścieżkę stylu systemu Windows?Konwertuj uniksową ścieżkę do okien w QMake Script


Mam problem ze zmienną _PRO_FILE_PWD_ w QMake gdzie zwraca ścieżkę stylu UNIX w systemie Windows.

np c:/foo/bar zamiast c:\foo\bar

to okazuje się problem, gdy ścieżka jest używany jako część etapu po łącza.

QMAKE_POST_LINK += copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll $${_PRO_FILE_PWD_}/bin/; 

używam plik .pro utworzyć projekt Visual Studio i widzę, że gdybym ręcznie zmienić ukośniki kopii ukośniki w VS, że wszystko jest w porządku kopiowane bez żadnych błędów.

Otrzymuję następujący błąd w Visual Studio, jeśli nie poprawię ścieżki.

PostBuildEvent: 
1> Description: copy /y C:\Qt\4.8.3\bin\QtCore4.dll E:/foo/build/win32//bin//; 
1> The syntax of the command is incorrect. 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: The command "copy /y C:\Qt\4.8.3\bin\QtCore4.dll E:/foo/build/win32/bin/; 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" exited with code 1. 

Rozwiązanie

rozwiązanie bardzo proste dzięki Roku dodając uciekły cudzysłowie ścieżki używając/znaków.

MAKE_POST_LINK += 
    copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\"; 

Uwaga: w celu dodania wielu poleceń kopiowania należy je rozdzielić za pomocą znaków ampersand, a średnik nie działa.

np.

MAKE_POST_LINK += 
     copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\" & 
    MAKE_POST_LINK += 
     copy /y $$[QT_INSTALL_BINS]\\QtGui4.dll \"$${_PRO_FILE_PWD_}/bin/\"; 
+0

Czy na pewno postać/jest problem? Działa prawie wszędzie w systemie Windows. Czy skopiowałeś-wkleiłeś wiersz kopiowania do wiersza polecenia i wypróbowałeś go tam? Może ostatnie; być problemem? –

+0

@Roku Właśnie próbowałem w wierszu polecenia .. Nie działa z/tylko \. ; jest tam, ponieważ mam kilka poleceń kopiowania. Próbowałem bez ... – volting

Odpowiedz

0

dostałem tej pracy dodając uciekły cudzysłowie ścieżki używając/znaki:

QMAKE_POST_LINK += 
    copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\"; 
+0

Dziękuję Roku za znalezienie bardzo prostego rozwiązania! Zauważ, że średnik nie działa w celu oddzielenia wielu poleceń - Musiałem użyć znaku ampersand. – volting

+1

To rozwiązanie nie jest crossplateform: powinieneś preferować odpowiedź @edwinc za pomocą $$ shell_path() –

+0

Nie działa również, gdy ścieżka źródłowa używa ukośników w przód. Dodano obejście problemu dla Qt4 – AntonyG

10

$$shell_path() dokona konwersji ukośniki do formatu systemu lokalnego, tak:

QMAKE_POST_LINK += copy /y "$$shell_path($$QT_INSTALL_BINS/QtCore4.dll)" "$$shell_path($$_PROD_FILE_PWD_/bin)" 
+0

dla mnie na wygranej 8/Qt 5.4 Dzięki! Możesz też zadzwonić do '$$ QMAKE_COPY' zamiast do' copy/y', które zostanie zastąpione niezależną od platformy wersją kopii. – amenthes

3

dziwne wystarczy, unikanie podwójnego cudzysłowu działa dla pliku docelowego, ale nie dla źródła.

znaczy to działa:

copy C:\dev\playground\qt\SampleProject\debug_qt.conf "C:/dev/playground/qt/build-SampleProject-Qt_8_4_6_Desktop-Debug/qt.conf" 

ale to nie:

copy "C:/dev/playground/qt/SampleProject/debug_qt.conf" "C:/dev/playground/qt/build-SampleProject-Qt_8_4_6_Desktop-Debug/qt.conf" 

Jak już wspomniano, $$shell_path(path) prace Qt5.

Na Qt4 można użyć zamiast niego $$replace(string, old_string, new_string).

Przykład:

MY_PATH = $$PWD 
message($$replace(MY_PATH, /, \\)) 
+0

Awesome. Dzięki za umieszczenie tam zarówno rozwiązań qt4, jak i qt5. – macetw

Powiązane problemy