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

Makefile模式规则异常咨询:自定义规则未触发却执行默认编译命令

关于Makefile静态模式规则未匹配时触发默认规则的问题分析

你的Makefile2内容如下:

test_0.o: %.o: %.cpp
    cp $< $@

当前工作目录存在test_1.cpp文件,执行命令:

make -f Makefile2 test_1.o

实际执行的却是:

g++ -c -o test_1.o test_1.cpp

这不是Makefile的已知问题,而是make的默认规则机制导致的:

  • 你编写的是静态模式规则,这种规则仅作用于冒号前明确列出的目标(这里只有test_0.o),test_1.o不在目标集合里,所以该规则不会被触发。
  • 当make找不到针对目标的显式规则或匹配的自定义模式规则时,会启用内置的默认规则。针对.cpp生成.o文件是make内置的默认编译规则,所以会自动调用g++完成编译。
  • 如果想让make在找不到对应规则时直接报错,可使用-r(或--no-builtin-rules)选项禁用默认规则,执行命令:
    make -r -f Makefile2 test_1.o
    
    此时make会提示没有生成test_1.o的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:19:53