Makefile执行正常但触发Error 12错误,寻求排查方案
问题定位与解决思路
首先明确:make: *** [Makefile:50: run] Error 12里的Error 12不是Makefile的语法或构建错误——你已经成功编译出可执行文件,且程序正常输出了Hello World,说明构建流程完全没问题。这个错误码是你的程序(Main.c)运行结束时返回给系统的退出状态码,make只是检测到这个非0返回值,判定run目标执行失败。
排查与修复步骤:
第一步:手动验证程序退出码
直接运行编译后的可执行文件,然后查看退出状态:./your_executable_name # 替换成你的目标文件名 echo $?你会看到输出是12,这坐实了是程序自身返回的问题。
第二步:检查Main.c的退出逻辑
打开src/Main.c,找到main函数的结尾:- 是不是写了
return 12;? - 有没有调用
exit(12);? - 有没有分支逻辑导致程序走到了返回非0的路径?
哪怕程序正常输出了内容,只要最后返回非0,make就会触发这个报错。
- 是不是写了
第三步:修复方案
- 如果是无意返回12:修改Main.c的
main函数,确保最后返回0(标准成功退出码),比如:
重新编译运行int main() { printf("Hello World\n"); // ... 其他代码 return 0; // 改成这个 }make run就不会报错了。 - 如果确实需要程序返回非0,但不想make报错:修改Makefile里的
run规则,忽略程序的退出码:
或者用run: $(TARGET) -./$(TARGET) # 前面加-,表示忽略命令的错误|| true强制让命令返回0:run: $(TARGET) ./$(TARGET) || true
- 如果是无意返回12:修改Main.c的
额外对比:检查模板项目
对比原来运行正常的模板项目的Main.c,看是不是复制模板时,新项目的Main.c遗漏了返回0的代码,或者新增了导致返回12的逻辑。
内容的提问来源于stack exchange,提问作者Sam Kent
相关产品推荐
相关产品推荐

