52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#include "compileprocessmanager.h"
|
|
|
|
#include <QProcess>
|
|
|
|
CompileProcessManager::CompileProcessManager(QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
m_process = new QProcess(this);
|
|
connect(m_process, &QProcess::finished,
|
|
this, &CompileProcessManager::onProcessFinished);
|
|
}
|
|
|
|
void CompileProcessManager::runCompile(const QString &sourceCode)
|
|
{
|
|
if (m_process->state() != QProcess::NotRunning) {
|
|
// 简单处理:如果已经在运行,就先杀掉,或直接返回
|
|
m_process->kill();
|
|
m_process->waitForFinished();
|
|
}
|
|
|
|
// TODO: 这里根据你的编译器协议生成指令和参数
|
|
// 假设你已存在一个后端可执行文件 "my_compiler_backend"
|
|
QString program = "my_compiler_backend";
|
|
|
|
QStringList args = buildArguments(sourceCode);
|
|
|
|
m_process->setProgram(program);
|
|
m_process->setArguments(args);
|
|
m_process->start();
|
|
}
|
|
|
|
QStringList CompileProcessManager::buildArguments(const QString &sourceCode)
|
|
{
|
|
QStringList args;
|
|
|
|
// TODO: 把 sourceCode 写入临时文件 / 管道 / 特定协议
|
|
// 这里只是示例:假设后端接受一个 -code "xxx" 的参数
|
|
args << "-code" << sourceCode;
|
|
|
|
return args;
|
|
}
|
|
|
|
void CompileProcessManager::onProcessFinished(int exitCode, QProcess::ExitStatus status)
|
|
{
|
|
Q_UNUSED(status);
|
|
|
|
QString stdoutText = QString::fromLocal8Bit(m_process->readAllStandardOutput());
|
|
QString stderrText = QString::fromLocal8Bit(m_process->readAllStandardError());
|
|
|
|
emit compileFinished(stdoutText, stderrText, exitCode);
|
|
}
|