2015-04-23 34 views
2

我正在尝试编写一个Qt应用程序,它将使用QProcess来调用ffmpeg.exe来转换媒体文件。我无法弄清楚确保ffmpeg.exe文件从我的开发目录复制到构建目录的最佳方式,以便构建(以及稍后部署的)应用程序可以访问它。将exe文件复制到Qt构建目录

我看到关于我的.pro文件(https://stackoverflow.com/a/13168287)使用INSTALLS参数信息,但QMAKE文档说:

注意,qmake可以跳过的可执行文件。

与上述所有,应该如何确保我想用于QProcess的exe文件最终在build目录中(准备稍后部署)?

回答

3

在构建应用程序时,您可以使用QMAKE_POST_LINK执行复制命令。只要把这个在你的.pro文件:

win32:{ 

    file_pathes += "\"$$PWD/Path/To/Files/ffmpeg.exe\"" 

    CONFIG(release, debug|release):{ 
     destination_pathes += $$OUT_PWD/release/ 
     destination_pathes += Path/To/Deploy/Directory 
    } 
    else:CONFIG(debug, debug|release):{ 
     destination_pathes += $$OUT_PWD/debug/ 
    } 

    for(file_path,file_pathes){ 
     file_path ~= s,/,\\,g 
     for(dest_path,destination_pathes){ 
      dest_path ~= s,/,\\,g 
      QMAKE_POST_LINK += $$quote(xcopy $${file_path} $${dest_path} /I /Y $$escape_expand(\n\t)) 
     } 
    } 
} 

你应该要被复制到file_pathes变量文件和路径到目的地目录添加路径destination_pathes变量。然后,在构建应用程序时,所有文件都将被复制到所有目标。

这里ffmpeg.exe被复制到应用程序构建和发布模式下部署目录,并在调试模式下建立目录。

+0

这看起来不错,我没有机会尝试一下,但是一旦我确认了它的作用,我会将其标记为答案。这只适用于Windows? – jp36

+0

工程太棒了!同样的事情会在其他平台上工作吗? – jp36

+1

在其他平台上,您应该使用特定于平台的命令。例如在Linux上,您应该使用'cp'来复制文件,如下所示:http://stackoverflow.com/questions/27745076/how-do-i-stop-qt-creator-placing-my-executable-in-a- debug-subdirectory/27745759#27745759 – Nejat