Скопируйте exe файл в каталог сборки Qt


Я пытаюсь написать приложение Qt, которое будет использовать QProcess для вызова ffmpeg.exe для преобразования медиафайлов. Я не могу понять, как лучше всего сделать так, чтобы файл ffmpeg.exe был скопирован из моего каталога разработки в каталог сборки, чтобы построенное (а затем развернутое) приложение имело к нему доступ.

Я видел информацию об использовании параметра INSTALLS в моем файле. pro (https://stackoverflow.com/a/13168287 ) но документы qmake говорят:

Обратите внимание, что qmake будет пропускать файлы, которые являются исполняемыми.

Учитывая все вышесказанное, как следует убедиться, что исполняемый файл, который я хочу использовать для QProcess, находится в каталоге сборки (готов к развертыванию позже)?

1 2

1 ответ:

Можно использовать 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 копируется в каталоги сборки и развертывания приложений в режиме выпуска и в каталог сборки в режиме отладки. режим.