2013-02-18 7 views
5

.proを含むディレクトリにWindowsスタイルパスを取得するか、_PRO_FILE_PWD_に格納されているものをWindowsスタイルパスに変換する必要はありますか?QMakeスクリプトでUnixパスをウィンドウに変換する


私はそれがWindows上でUNIX形式のパスを返しますqmakeの中_PRO_FILE_PWD_変数に問題があります。

例えばc:/foo/bar代わりにc:\foo\bar

これは、パスは、ポストリンク手順の一部として使用されている問題を証明しています。

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

は、私は、Visual Studioプロジェクトを作成するために、 .proファイルを使用して、私は私が手動で変更された場合、前方はすべてがエラーなし罰金にコピーされていることをVSにスラッシュをバックアップするスラッシュことがわかります。

パスを訂正しないと、Visual Studioで次のエラーが発生します。 Rokuのに

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. 

ソリューション

非常にシンプルなソリューションのおかげで/文字を使用してパスを中心にエスケープされた二重引用符を追加します。

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

複数のコピーコマンドを追加する場合は、アンパサンドで区切る必要があります。セミコロンは機能しません。

そう、

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

あなたは文字が/問題ですか?これは、Windowsのほぼすべての場所で動作します。コピーラインをコマンドプロンプトにコピーして試しましたか?最後にできました。問題なの? –

+0

@Roku私はコマンドプロンプトで試しました../only \とは動作しません。 ;私はいくつかのコピーコマンドを持っているので、そこにあります。私は...なしで試してみました。 – volting

答えて

0

私は/文字を使用してパスを中心にエスケープされた二重引用符を追加することで、この作業を得た

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

非常に簡単な解決策を見つけることに感謝Roku!セミコロンは複数のコマンドを区切るためには機能しません。アンパサンドを使用する必要があります。 – volting

+1

この解決策はcrossplateformではありません。$$ shell_path()を使用して@edwinc answerを使用することをお勧めします。 –

+0

ソースパスがスラッシュを使用する場合は、これも機能しません。 Qt4の回避策を追加しました – AntonyG

10

$$shell_path()はローカルシステム形式にスラッシュを変換します:

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

が勝利8/Qt 5.4で働いてくれましたありがとうございました! 'copy/y'の代わりに' $$ QMAKE_COPY'を呼び出すこともできます。これは、プラットフォームに依存しないcopyのバージョンに置き換えられます。 – amenthes

3

を奇妙なことに二重引用符をエスケープするだけでは、宛先ファイルではなくソースでは機能します。

すなわち、この作品:

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

が、これにはないが:

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

としてはすでに、Qt5下$$shell_path(path)作品を指摘しました。

Qt4では、代わりに$$replace(string, old_string, new_string)を使用できます。

例:

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

素晴らしいです。 qt4とqt5の両方のソリューションをお寄せいただきありがとうございます。 – macetw

関連する問題