在QMake Script中将Unix路径转换为Windows

vol*_*ing 7 windows qt qmake path visual-studio-2010

无论如何要获得包含.pro或转换存储在_PRO_FILE_PWD_Windows样式路径中的目录的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/;
Run Code Online (Sandbox Code Playgroud)

我使用该.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.
Run Code Online (Sandbox Code Playgroud)

非常简单的解决方案,感谢Roku使用/字符在路径周围添加转义双引号.

MAKE_POST_LINK += 
    copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\";  
Run Code Online (Sandbox Code Playgroud)

注意添加多个复制命令,您必须使用&符号分隔它们,分号不起作用.

例如

 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/\";  
Run Code Online (Sandbox Code Playgroud)

edw*_*inc 13

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

QMAKE_POST_LINK += copy /y "$$shell_path($$QT_INSTALL_BINS/QtCore4.dll)" "$$shell_path($$_PROD_FILE_PWD_/bin)"
Run Code Online (Sandbox Code Playgroud)

  • 为我赢得了胜利8/Qt 5.4谢谢!您也可以调用`$$ QMAKE_COPY`而不是`copy/y`,这将替换为平台无关的副本版本. (2认同)

Ant*_*nyG 6

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

即这工作:

copy C:\dev\playground\qt\SampleProject\debug_qt.conf "C:/dev/playground/qt/build-SampleProject-Qt_8_4_6_Desktop-Debug/qt.conf"
Run Code Online (Sandbox Code Playgroud)

但这不是:

copy "C:/dev/playground/qt/SampleProject/debug_qt.conf" "C:/dev/playground/qt/build-SampleProject-Qt_8_4_6_Desktop-Debug/qt.conf"
Run Code Online (Sandbox Code Playgroud)

如前所述,$$shell_path(path)Qt5下的作品.

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

例:

MY_PATH = $$PWD
message($$replace(MY_PATH, /, \\))
Run Code Online (Sandbox Code Playgroud)


小智 3

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

QMAKE_POST_LINK += 
    copy /y $$[QT_INSTALL_BINS]\\QtCore4.dll \"$${_PRO_FILE_PWD_}/bin/\";
Run Code Online (Sandbox Code Playgroud)