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会提示没有生成make -r -f Makefile2 test_1.otest_1.o的规则。
内容的提问来源于stack exchange,提问作者chao
相关产品推荐
相关产品推荐

