8

无论如何要获取包含目录的Windows 样式路径.pro或将存储的内容转换_PRO_FILE_PWD_为 Windows 样式路径?


我对_PRO_FILE_PWD_Qmake 中的变量有疑问,它在 Windows 上返回 unix 样式路径。

例如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/\";  
4

3 回答 3

14

$$shell_path()将斜杠转换为本地系统格式,因此:

QMAKE_POST_LINK += copy /y "$$shell_path($$QT_INSTALL_BINS/QtCore4.dll)" "$$shell_path($$_PROD_FILE_PWD_/bin)"
于 2013-08-30T02:01:48.873 回答
6

奇怪的是,转义双引号适用于目标文件,但不适用于源文件。

即这有效:

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"

如前所述,$$shell_path(path)在 Qt5 下工作。

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

例子:

MY_PATH = $$PWD
message($$replace(MY_PATH, /, \\))
于 2015-06-11T07:16:14.307 回答
2

我通过使用 / 字符在路径周围添加转义双引号来实现此功能:

QMAKE_POST_LINK += 
    copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\";
于 2013-02-18T18:07:43.357 回答