Linux Makefile学习

编译环境GNU Make 4.1

# 变量声明方式,会在需要展开时进行展开
# 貌似变量前面后面加空格是没关系的
OBJECTS=   main.o test1.o test3.o   
# 无论执行make或是make clean,打印出的TESTVAL值都是2
# 所以变量重新赋值会可能产生一些意想不到的问题
TESTVAL=1

.PHONY:out
# 第一个目标名为默认最终目标名
#out:main.o test1.o test3.o
# 等价语句
out1:$(OBJECTS)
	#gcc -o out main.o test1.o test3.o
	# 等价语句
	#gcc -o out $(OBJECTS)
	# 等价语句
	# $@代表所有输出
	gcc -o $@ $(OBJECTS)
	# 等价语句
	# $^代表所有输入
	#gcc -o $@ $^
	@# 在执行过程中会显示每一句话,如果不想显示则加@
	@echo $(TESTVAL)

main.o:main.c test1.h test3.h 
	gcc -c main.c

test1.o:test1.c test1.h test2.h
	gcc -c test1.c
	# 如果test1.c编译错误,即便有touch,test1.o和test3.o都不会出现,在gcc -c test1.c前面加“-”号才可以实现继续make
	#touch test1.o 

test3.o:test3.c test3.h test4.h
	gcc -c test3.c

# %.o代表所有在匹配的.o输出文件
# %.c代表.o相应名称的.c
# 如果除了main.o、test1.o、test2.o还有其他.o文件需要匹配,则使用此条规则
%.o:%.c
	gcc -c $^
	# 等价语句
	# $<代表第一个输入参数
	#gcc -c $<

# 无论执行make或是make clean,打印出的TESTVAL值都是2
# 所以变量重新赋值会可能产生一些意想不到的问题
TESTVAL=2

# wildcard代表通配符展开,如果“OBJS=*.o”就不对了
# 如果变量后面加注释如下,则变量后面多了一个空格,在某些场合会出错
# OBJS=$(wildcard *.o) #
# .PHONY:代表无视依赖性,每次都执行,用在clean上是为了防止有文件名称为clean
.PHONY:clean
clean:
	rm -f main.o test1.o test3.o out
	@echo $(TESTVAL)
	# 等价语句
	#rm -f $(OBJS) out
	# 等价语句
	# 此处要加“-”号,否则第一步没执行完第二步就不执行了
	#-rm -f main.o test1.o 
	#-rm -f test3.o out
	# 等价语句
	#rm -f *.o out

还有很多高级技巧,待续~

参考文献:跟我一起写Makefile 陈皓

http://blog.csdn.net/haoel/article/details/2886/

http://blog.csdn.net/haoel/article/details/2887/

http://blog.csdn.net/haoel/article/details/2888/

http://blog.csdn.net/haoel/article/details/2889/

http://blog.csdn.net/haoel/article/details/2890/

http://blog.csdn.net/haoel/article/details/2891/

http://blog.csdn.net/haoel/article/details/2892/

http://blog.csdn.net/haoel/article/details/2893/

http://blog.csdn.net/haoel/article/details/2894/

http://blog.csdn.net/haoel/article/details/2895/

http://blog.csdn.net/haoel/article/details/2896/

http://blog.csdn.net/haoel/article/details/2897/

http://blog.csdn.net/haoel/article/details/2898/

http://blog.csdn.net/haoel/article/details/2899/

原文地址:https://www.cnblogs.com/jhc888007/p/7045367.html