后端与可执行文件交互
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QProcess> // ✅ 关键:要完整引入 QProcess
|
||||
#include <QProcess>
|
||||
#include <QString>
|
||||
|
||||
class CompileProcessManager : public QObject
|
||||
{
|
||||
@@ -9,13 +10,34 @@ class CompileProcessManager : public QObject
|
||||
public:
|
||||
explicit CompileProcessManager(QObject *parent = nullptr);
|
||||
|
||||
// 目前简单接受代码字符串,后面可以加更多参数
|
||||
void runCompile(const QString &sourceCode);
|
||||
// 设置 mini_c 可执行文件路径,如:"/Users/xxx/mini_c_build/mini_c"
|
||||
void setBackendProgram(const QString &programPath);
|
||||
|
||||
signals:
|
||||
void compileFinished(const QString &stdoutText,
|
||||
const QString &stderrText,
|
||||
int exitCode);
|
||||
// 设置项目根目录,用来拼接 "test.c"、"test.s" 这样的相对路径
|
||||
// 比如:"/Users/haolixin/Desktop/Compiler_Project"
|
||||
void setProjectRoot(const QString &rootPath);
|
||||
|
||||
// 异步生成汇编:
|
||||
// inputFileName 比如 "test.c"(在项目根目录下)
|
||||
// outputFileName 比如 "test.s"(希望输出的文件名,同样在项目根目录下)
|
||||
//
|
||||
// 调用后立刻返回,编译结束后,通过 asmGenerated 信号把结果发给前端。
|
||||
void generateAsm(const QString &inputFileName,
|
||||
const QString &outputFileName);
|
||||
|
||||
signals:
|
||||
// asmText: 读出来的汇编文本(通常就是 outputFileName 的内容)
|
||||
// outputFilePath: 实际写出的汇编文件完整路径(项目根目录下)
|
||||
// stdoutText / stderrText: mini_c 的标准输出 / 错误输出(原样传递,不做处理)
|
||||
// exitCode: mini_c 的返回码(0 正常,非 0 表示错误)
|
||||
void asmGenerated(const QString &asmText,
|
||||
const QString &outputFilePath,
|
||||
const QString &stdoutText,
|
||||
const QString &stderrText,
|
||||
int exitCode);
|
||||
|
||||
// 出现明显错误(比如 mini_c 路径没设、源文件不存在等)
|
||||
void processError(const QString &message);
|
||||
|
||||
private slots:
|
||||
void onProcessFinished(int exitCode, QProcess::ExitStatus status);
|
||||
@@ -23,5 +45,11 @@ private slots:
|
||||
private:
|
||||
QProcess *m_process = nullptr;
|
||||
|
||||
QStringList buildArguments(const QString &sourceCode);
|
||||
QString m_backendProgram; // mini_c 路径
|
||||
QString m_projectRoot; // 项目根目录
|
||||
|
||||
// 当前这次 generateAsm 的输入/输出信息,用来在 finished 时读文件
|
||||
QString m_pendingInputFile; // 完整路径:root + inputFileName
|
||||
QString m_pendingOutputFile; // 仅文件名,如 "test.s"
|
||||
bool m_isAsmOperation = false;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user