gnu make 手册 学习笔记 C语言 / C++ 构建工具 part.4 Pattern rule 隐式规则 implicit rule

4-1.Pattern rule

有Implicit Rules/隐私规则,和过时的后缀规则。主要是为了方便使用。
可以使用 make -p 来显示默认的规则,当然也可以使用配置文件覆盖规则。

如果prerequires没有找到对应的target,或者文件,会使用pattern rule来进行模式匹配,
如果匹配上的话,使用pattern rule定义的规则,做出target/文件,让别的target引用。

如果编译的时候出现奇怪的现象,可以覆盖这些pattern rule,就当是写shell来写Makefile
简单的C语言编译的隐含规则。
%.o: %.c
#  recipe to execute (built-in):     将.c文件编译为.o文件
    $(COMPILE.c) $(OUTPUT_OPTION) $<
    
%.o: %.C
#  recipe to execute (built-in):    将.C文件编译为.o文件
    $(COMPILE.C) $(OUTPUT_OPTION) $<

%: %.o
#  recipe to execute (built-in):   将.o文件链接为可执行文件
    $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@    
例子

Makefile

.PHONY: all clean

test_target : src/main.o   test.o
		#这里没有写recipe,prequires中的.o文件本身也还没存在,
	    #例如src/main.o 这个prequires,make没有找到这个文件,然后找它的同名target,也没找到,就会pattern中的下面这个
	    #使用.c文件编译成.o文件

#改写的默认的pattern rule,依然会编译,但是会输出一行信息
%.o : %.c	
	$(COMPILE.c)    $<   $(OUTPUT_OPTION) 
	@echo c-----------------o

clean:
	rm -rf  *.o src/*.o lib/*.o *.exe src/*.exe lib/*.exe

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lijinken/article/details/88691719