# 编译系统 **Repository Path**: NightZheng/compilation-system ## Basic Information - **Project Name**: 编译系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-23 - **Last Updated**: 2025-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 编译系统项目 ## 项目概述 该项目是一个简单的编译系统,包含一个词法分析器(Lexer),用于分析 C/C++ 代码并提取其中的标记(Token)。本项目支持通过命令行运行测试,并将测试结果输出到文件中。项目实现了一个基础的构建系统,使用 `make` 工具进行项目的编译和管理。 ### 项目结构 ``` project/ │ ├── src/ # 源代码文件夹 │ ├── lexer/ # 词法分析器相关代码 │ └── ... # 其他源代码文件 │ ├── include/ # 头文件文件夹 │ ├── lexer/ # 词法分析器头文件 │ └── ... # 其他头文件 │ ├── test/ # 测试文件夹 │ ├── test_runner.cpp # 测试文件 │ └── ... # 其他测试文件 │ ├── Makefile # Makefile 构建脚本 ├── README.md # 项目说明文档 └── ... # 其他项目文件 ``` ## 安装与配置 ### 安装 `make` #### 安装 `GnuWin Make` 工具 1. **安装 Chocolatey(如果尚未安装)**: - 打开 PowerShell 并以管理员身份运行。 - 运行以下命令来安装 Chocolatey: ```powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) ``` - 或打开 cmd 并以管理员身份运行 - 运行以下命令来安装 Chocolatey: ```cmd bash @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" ``` 2. **使用 Chocolatey 安装 `GnuWin Make`**: - 安装 `make` 工具: ```powershell choco install make ``` (需要管理员权限) 3. **下载 `GnuWin32 Make`(可选,备用方法)**: - 下载地址:[GnuWin32 Make 下载](http://gnuwin32.sourceforge.net/packages/make.htm) ### 安装并配置 `g++` 编译器 #### 安装 `MinGW`(适用于 Windows) 1. 通过 `Chocolatey` 安装 MinGW: - 如果尚未安装 `MinGW` 编译器,可以通过 Chocolatey 安装: ```powershell choco install mingw ``` - 安装完成后,确保 `MinGW` 的 `bin` 目录路径(如 `C:\Program Files\mingw-w64\bin`)已添加到系统的 `PATH` 环境变量中。 2. 手动安装 `MinGW`(备用方法): - 下载 MinGW 安装程序:[MinGW-w64 下载链接](https://sourceforge.net/projects/mingw-w64/) - 安装时选择适合自己系统的选项(例如,`x86_64` 版本)。 - 完成安装后,确保将 `MinGW` 安装目录的 `bin` 子目录添加到系统 `PATH` 环境变量中。路径通常为:`C:\Program Files\mingw-w64\bin` #### 配置 `g++` 环境变量 1. 打开 **控制面板 -> 系统 -> 高级系统设置 -> 环境变量**。 2. 在系统变量中找到 `Path`,点击 **编辑**。 3. 添加 `g++` 的安装目录到 `Path` 环境变量。例如,如果你安装了 MinGW,它的 `bin` 目录路径可能是:`C:\Program Files\mingw-w64\bin` 4. 保存并关闭窗口,重新启动终端。 #### 验证 `g++` 是否安装成功 1. 打开新的 PowerShell 或命令提示符(CMD)窗口,输入以下命令: ```powershell g++ --version ``` 2. 如果 `g++` 安装成功并配置正确,你将看到类似下面的输出: ``` g++ (MinGW.org GCC) 8.2.0 ``` ## 项目构建与运行 ### 使用 `make` 构建项目 **注:所有 `make` 命令都要在项目根目录执行,即 `Makefile` 所在目录** 1. 打开命令行工具,进入项目目录。 2. 使用以下命令来编译并构建项目: ```bash make main ``` 这会根据 `Makefile` 中的规则,编译源代码并生成 `main.exe` 可执行文件。执行成功后,`main.exe` 将会自动运行并输出结果。 ### 运行测试 为了确保项目正确工作,您可以执行以下命令运行所有测试: 1. 执行测试: ```bash make test ``` 该命令会编译并运行测试文件,结果将被输出到控制台。 ### 清理构建文件 **通常在代码有更新的时候就需要进行此操作。** 您可以通过以下命令删除所有编译生成的文件(如目标文件、可执行文件等): ```bash make clean ``` 这将删除 `build` 文件夹及其中的所有临时文件,以及生成的 `main.exe` 和 `test_runner.exe` 可执行文件。 ## 如何扩展与新增测试 ### 1. 新建测试文件 要新增测试用例,您可以在 `test` 文件夹下创建新的 `.cpp` 测试文件。例如,您可以创建一个新的测试文件 `test_case1.cpp`: ```cpp #include #include "../include/lexer/lexer.h" std::string TestCase1() { // 测试源码,随便给一小段 C 语言代码 std::string testCode = R"( int main() { int a = 5; if (a > 0) { a = a - 1; } return a; } )"; // 返回测试代码 return testCode; } ``` ### 2. 在 `test_runner.cpp` 中引用新测试 然后,您需要在 `test_runner.cpp` 文件中引用新创建的测试用例。只需在 `test_runner.cpp` 文件中添加以下代码: ```cpp #include "test_case1.cpp" // 引入新建的测试文件 int main() { // 调用新建的测试用例 runTest(TestCase1(), "output\\output1") return 0; } ``` ### 3. 编译并运行测试 保存文件后,使用以下命令编译并运行新的测试: ```bash make test ``` 测试将会执行,所有结果将显示在控制台中。 ## 编译系统功能 ### 词法分析器(Lexer) - 负责将源代码(如 C 或 C++ 代码)转换为一个标记流(Token stream)。 - 提供了错误报告机制,可以将错误信息输出到文件。 ### 构建系统 - 使用 `Makefile` 管理项目的构建过程,支持编译、链接和清理操作。 - 可以单独编译主程序或运行所有测试。 ### 测试框架 - 测试框架提供了一个简单的接口来编写和运行测试。 - 每个测试用例可以将源代码传递给词法分析器并输出分析结果。 ## 常见问题 ### 1. 运行 `make` 命令时出现 "undefined reference" 错误 这种错误通常是因为目标文件没有正确链接。检查 `Makefile` 中的目标文件,确保每个源文件都被编译并正确链接。 ### 2. 如何调试测试用例? 您可以通过在测试中插入打印语句来调试,或者使用调试工具(如 GDB)逐步执行测试用例,查找问题所在。