作者:GWD 时间:2019.7.7
一、课程内容:
摘要:本节课写了一个程序,a,b,c三个c文件,其中a.c是主函数调用b.c和c.c中的printf函数,目的是引入Makefile以及学习一些Makefile中的规则符号和在Makefile中定义变量。
1、问:什么是通配符%,有什么作用?
答:通配符是一种特殊语句,用来模糊搜索文件。当查找文件时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。 在Makefile中用来代替重复出现的a.o :a.c、b.o : b.c……从而达到简化避免多次重复输入的目的。<表示第一个依赖,@表示目标文件,^表示所有依赖;
2、问:如何利用Makefile清除中间文件?
答:将clean指令作为一个没有依赖文件的“目标文件”,执行这个可执行文件就行了。由此可见,Makefile在使用时可以带目标名也可以不带,若不带目标名则生成规则里面的第一个目标。
3、问:如何在Makefile中定义变量与各变量的区别?
答:变量有:即时变量、延时变量;简单变量(即时变量) :A := xxx(A的值即刻确定,在定义时即确定);延时变量B = xxx (B的值使用到时才确定);
:= # 即时变量
= # 延时变量
?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+= # 附加, 它是即时变量还是延时变量取决于前面的定义
二、学习要点
注:使用变量时,用
来
引
用
来引用
来引用(变量);
三、代码:
a.c
#include<stdio.h>
int main(void)
{
fun_b();
fun_c();
return 0;
}
b.c
#include<stdio.h>
void fun_b(void)
{
printf("This is B\n");
}
c.c
#include<stdio.h>
void fun_c(void)
{
printf("This is c\n");
}
语法的Makefile
test : a.o b.o c.o
gcc -o test $^
%.o : %.c
gcc -c -o $@ $<
clean:
rm *.o test
变量的Makefile
a:=$(c)
b =$(c)
c = gwd
show:
@echo a = $(a) #这里的@是不显示echo
@echo b = $(b)