2013-02-18 61 views
5

是否有辦法將windows樣式路徑獲取到包含.pro的目錄或將_PRO_FILE_PWD_中存儲的內容轉換爲Windows樣式路徑?將Unix路徑轉換爲QMake腳本中的窗口


我有在QMAKE的_PRO_FILE_PWD_變量它返回Windows上的UNIX風格路徑的問題。

e.g c:/foo/bar代替c:\foo\bar

這被證明是在路徑被用作一個鏈接後步驟的一部分的問題。

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

我用.pro文件創建一個Visual Studio項目,我可以看到,如果我手動更改斜線向後斜槓在VS一切都沒有任何錯誤複製的罰款。

如果我不糾正路徑,我在Visual Studio中出現以下錯誤。

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. 

解決方案

非常簡單的解決方案由於Roku公司通過使用/字符添加路徑周圍逃脫雙引號。

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

有關添加多個複製命令的注意事項,必須使用分號分隔它們,分號不起作用。

例如

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

確定的字符/是什麼問題?它在Windows中幾乎可以在任何地方使用你是否將複製行復制粘貼到命令提示符並在那裏嘗試過?最後一個;是問題嗎? – 2013-02-18 16:06:33

+0

@Roku我剛剛嘗試過命令提示符。它不適用於/ only \。 The;是因爲我有幾個副本命令..我已經嘗試沒有... – volting 2013-02-18 17:11:45

回答

0

我用/字符添加路徑周圍逃脫雙引號得到這個工作:

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

感謝Roku尋找一個非常簡單的解決方案!注意分號不能用於分隔多個命令 - 我必須使用&符號。 – volting 2013-02-18 18:51:48

+1

此解決方案不是crossplateform:您應該更喜歡使用$$ shell_path() – 2013-12-19 16:08:53

+0

的@edwinc答案當源路徑使用正斜槓時,它也不起作用。 Qt4增加了一個解決方法 – AntonyG 2015-06-11 07:27:41

10

$$shell_path()將轉換斜線到本地系統格式,所以:

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

爲我贏得勝利8/Qt 5.4謝謝!您也可以調用'$$ QMAKE_COPY'而不是'copy/y',並將其替換爲平臺獨立版本的副本。 – amenthes 2015-03-25 20:49:08

3

奇怪足夠的,逃避雙引號工作的目標文件,但不是源。

即這個工程:

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

但這並不:QT5下

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

如前所述,$$shell_path(path)作品。

在Qt4上,可以使用$$replace(string, old_string, new_string)

例子:

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

太棒了。感謝您將qt4和qt5解決方案放在那裏。 – macetw 2016-01-12 13:20:00