Как QProcess работает на Windows - PullRequest
       18

Как QProcess работает на Windows

0 голосов
/ 01 ноября 2011

Я пытаюсь узнать, как работает QProcess, и имею такой код:

#include <iostream>
using std::cout;
using std::endl;

#include <string>
using std::string;

#include <QtCore/QCoreApplication>
#include <QStringList>
#include <QString>
#include <QProcess>
#include <QIODevice>

#define LINE cout << "\n=====================================\n" << endl;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    LINE;
    cout << "\nstarting process ..." << endl;

    QObject *parent;
    QString program = "make";
    QStringList arguments;
    arguments << "all";
    QProcess *process = new QProcess();

    QString outputFile = "H:\\processOutput.txt";
    process->setStandardOutputFile( outputFile, QIODevice::Append);
    process->setWorkingDirectory( "H:\\sample");
    process->start(program, arguments );

    cout << "\ndone..." << endl;
    LINE;

    return a.exec();
} // end main

Процесс "program" должен быть запущен в папке "H: \ sample", в которой есть два файла: main.cpp и Makefile.

Я ожидаю, что make будет вызываться с аргументом all. Изучая выходные данные процесса (в файле "H: \ processOutput.txt"), я вижу только текст "main", а компиляция не выводится.

Запуск "make all" на cmd работает и дает обычные результаты, main.exe. Весь код кажется выполненным до конца, потому что я вижу строку "готово ...". Чего мне не хватает?

1 Ответ

2 голосов
/ 02 ноября 2011

QProcess, как видно из названия, запускает отдельный процесс, однако процесс не привязан к карте среды, как командная строка.

Поскольку в H:\sample нет исполняемого файла make, процесс немедленно завершается.Вместо этого оберните ваш вызов вокруг cmd следующим образом:

...
QString program = "%cmdspec%";
QStringList arguments;
arguments << "\\C" << "\"make all\"";
QProcess *process = new QProcess();
...

% cmdspec% - это глобальная переменная среды, которая указывает системный путь по умолчанию к исполняемому файлу командной строки.

...