看了Makefile用法,一直不明白什么事隐式规则,定义是这样的
然后就出个这个,怎么回事,有点蒙,网上找了下,也很难理解,是我太愚钝了吧…
看了很久才有点名明白,就是他会默认调用规则
.c文件编译成.o文件 要用隐式规则的话就要就用第一个 $(CFLAGS)是可以自己再来定义的 如 CFLAGS = -Wall -O -g
举个例子吧
建三个文件
//add.c
#include "add.h"
void add(int x,int y)
{
printf(" num is %d \n ",x+y);
}
//add.h 我这文件是房子hrp文件夹下
#include <stdio.h>
void add(int ,int );
//main.c
#include <stdio.h>
#include "add.h"
int main()
{
add(14,30);
printf("wh are you");
return 0;
}
代码就是随便写。。。
然后没用隐式规则的makefile
OBJS = add.o main.o
main:$(OBJS)
gcc $(OBJS) -o main
add.o:add.c
gcc -c -I./hrp add.c -o add.o
main.o:main.c
gcc -c -I./hrp main.c -o main.o
clean:
rm *.o
成功了,make -f 是make指定的makefile文件
然后我们看看隐式的
OBJS = add.o main.o
CFLAGS = -Wall -O -g -I./hrp
main:$(OBJS)
gcc -I./hrp $^ -o $@
# 上面的其实就是这个规则来的 $(CC)-c $(CPPFLAGS) $(CFLAGS)
# $(CFLAGS)这个我们可以自定义 CFLAGS = -Wall -O -g -I./hrp
clean:
rm *.o
我们执行下make
发现也是可以的
如果我们把
makefile文件的
CFLAGS = -Wall -O -g -I./hrp 改了 像这样
明显是头文件路径不对了
这说明了什么呢,$(CFLAGS)是隐藏的,我们可以自己去定义
这然来理解隐式规则应该比较容易把。。。
**
如果有错大家一定要指出来哈
**