Windows qmake命令将文件和文件夹复制到输出目录

Windows qmake命令将文件和文件夹复制到输出目录,windows,qt,qmake,xcopy,Windows,Qt,Qmake,Xcopy,我正在开发一个应用程序,它应该使用QtCreator和qt5.3构建在Windows、Linux和osx上。我想将文件夹中的所有文件和子文件夹复制到输出文件夹中。我已经让它在Linux和OSX上运行,但不适用于Windows。以下是my.pro文件的相关部分: win32 { PWD_WIN = $${PWD} DESTDIR_WIN = $${OUT_PWD} copyfiles.commands = $$quote(cmd /c xcopy /S /I $${PWD_

我正在开发一个应用程序,它应该使用QtCreator和qt5.3构建在Windows、Linux和osx上。我想将文件夹中的所有文件和子文件夹复制到输出文件夹中。我已经让它在Linux和OSX上运行,但不适用于Windows。以下是my.pro文件的相关部分:

win32 {
    PWD_WIN = $${PWD}
    DESTDIR_WIN = $${OUT_PWD}
    copyfiles.commands = $$quote(cmd /c xcopy /S /I $${PWD_WIN}\copy_to_output $${DESTDIR_WIN})
}
macx {
    copyfiles.commands = cp -r $$PWD/copy_to_output/* $$OUT_PWD
}
linux {
    copyfiles.commands = cp -r $$PWD/copy_to_output/* $$OUT_PWD
}
QMAKE_EXTRA_TARGETS += copyfiles
POST_TARGETDEPS += copyfiles

我在Windows上遇到的错误是“参数数无效”。

如果查看带有
消息($${PWD})
$${PWD}
变量,即使在Windows中,您也会看到
/
作为目录分隔符。您必须将其转换为本机目录分隔符:

PWD_WIN = $${PWD}
DESTDIR_WIN = $${OUT_PWD}
PWD_WIN ~= s,/,\\,g
DESTDIR_WIN ~= s,/,\\,g

copyfiles.commands = $$quote(cmd /c xcopy /S /I $${PWD_WIN}\\copy_to_output $${DESTDIR_WIN})

QMAKE_EXTRA_TARGETS += copyfiles
POST_TARGETDEPS += copyfiles
基于,Qt实际上是将文件路径转换为本地系统的首选项

$$shell_path( <your path> ) //Converts to OS path divider preference.
$$clean_path( <your path> ) //Removes duplicate dividers.

如果每次都要这样做,还需要将/Y添加到xcopy命令中。否则它将被挂起。(/Y-取消确认覆盖现有目标文件的提示)。
#For our copy command, we neeed to fix the filepaths to use Windows-style path dividers.
SHADER_SOURCE_PATH = $$shell_path($$clean_path("$${SOURCE_ROOT}\\Engine\\Shaders\\"))
SHADER_DESTINATION = $$shell_path($$clean_path("$${PROJECT_BIN}\\Shaders\\"))

#Create a command, using the 'cmd' command line and Window's 'xcopy', to copy our shaders folder
#into the Game/Bin/Shaders/ directory.
CopyShaders.commands = $$quote(cmd /c xcopy /Y /S /I $${SHADER_SOURCE_PATH} $${SHADER_DESTINATION})

#Add the command to Qt.
QMAKE_EXTRA_TARGETS += CopyShaders
POST_TARGETDEPS += CopyShaders