Files
Compiler_GUI/backend/compileprocessmanager.h
2025-12-12 18:54:13 +08:00

56 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QObject>
#include <QProcess>
#include <QString>
class CompileProcessManager : public QObject
{
Q_OBJECT
public:
explicit CompileProcessManager(QObject *parent = nullptr);
// 设置 mini_c 可执行文件路径,如:"/Users/xxx/mini_c_build/mini_c"
void setBackendProgram(const QString &programPath);
// 设置项目根目录,用来拼接 "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);
private:
QProcess *m_process = nullptr;
QString m_backendProgram; // mini_c 路径
QString m_projectRoot; // 项目根目录
// 当前这次 generateAsm 的输入/输出信息,用来在 finished 时读文件
QString m_pendingInputFile; // 完整路径root + inputFileName
QString m_pendingOutputFile; // 仅文件名,如 "test.s"
bool m_isAsmOperation = false;
};