Peep编译器Makefile问题排查及test-i2p测试文件编写咨询
Peep编译器Makefile排查指南
- 核对依赖关系:确认每个编译目标(如最终可执行文件
peep)的依赖项完整,所有需要编译的.c文件都被纳入,头文件变更时能触发对应源文件的重编译。推荐用$(wildcard *.c)自动匹配目录下所有C文件,避免手动列写遗漏。 - 检查编译/链接命令:编译阶段的命令(如
gcc -c $< -o $@)需确保包含必要参数:-Wall开启警告便于排查潜在问题、-I.指定头文件搜索目录、-g生成调试信息方便后续调试。链接阶段要保证所有生成的.o目标文件都被加入,比如通过OBJS = $(patsubst %.c,%.o,$(wildcard *.c))定义目标文件列表,再用peep: $(OBJS)作为链接目标。 - 执行基础编译测试:直接运行
make命令,观察是否能正常完成编译。若出现报错,根据错误信息定位:头文件未找到则检查-I参数是否正确,函数未定义则确认对应.c文件是否被纳入依赖。 - 验证清理目标:确保
clean目标能正确清理生成的中间文件和可执行文件,比如编写为:
避免使用clean: rm -f peep *.orm -rf防止误删非编译生成的文件。
test-i2p测试文件编写指导
- 明确测试核心:test-i2p用于验证编译器的整数到指针(i2p)转换功能,测试用例需围绕该转换场景设计。
- 测试用例组织:
- 测试文件可采用纯文本格式,每行对应一个独立测试用例,内容为Peep语言代码片段,例如:
int x = 100; void* ptr = (void*)x; int y = 0; void* null_ptr = (void*)y; int z = -1; void* neg_ptr = (void*)z; - 若需要验证输出结果,可采用“输入代码|预期输出”的格式,方便后续自动化脚本比对。
- 测试文件可采用纯文本格式,每行对应一个独立测试用例,内容为Peep语言代码片段,例如:
- 自动化测试实现:编写shell脚本批量执行测试用例,示例如下:
#!/bin/bash TEST_FILE="test-i2p" if [ ! -f "$TEST_FILE" ]; then echo "测试文件不存在" exit 1 fi while IFS= read -r line; do # 跳过空行和注释行 [[ -z "$line" || "$line" =~ ^# ]] && continue echo "$line" > temp_input.peep ./peep temp_input.peep -o temp_output.o if [ $? -eq 0 ]; then echo "[PASS] $line" else echo "[FAIL] $line" fi rm -f temp_input.peep temp_output.o done < "$TEST_FILE" - 覆盖边界场景:除常规整数转换外,需加入边界测试用例,比如最大整数值转换、最小整数值转换、零值转换等,确保编译器在极端场景下的稳定性和正确性。
内容的提问来源于stack exchange,提问作者Hery Mark
相关产品推荐
相关产品推荐

