You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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就会触发这个报错。
  • 第三步:修复方案

    1. 如果是无意返回12:修改Main.c的main函数,确保最后返回0(标准成功退出码),比如:
      int main() {
          printf("Hello World\n");
          // ... 其他代码
          return 0;  // 改成这个
      }
      
      重新编译运行make run就不会报错了。
    2. 如果确实需要程序返回非0,但不想make报错:修改Makefile里的run规则,忽略程序的退出码:
      run: $(TARGET)
          -./$(TARGET)  # 前面加-,表示忽略命令的错误
      
      或者用|| true强制让命令返回0:
      run: $(TARGET)
          ./$(TARGET) || true
      
  • 额外对比:检查模板项目
    对比原来运行正常的模板项目的Main.c,看是不是复制模板时,新项目的Main.c遗漏了返回0的代码,或者新增了导致返回12的逻辑。

内容的提问来源于stack exchange,提问作者Sam Kent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:07:04