makefile中遇到的问题
2、现象:修改.h文件,在文件中定义一个变量,但是在编译时,提示没有定义该变量。将该变量复制到源文件中显示定义了该变量。
解决办法:将文件夹下的以.h.gch为扩展名的文件删除。
原因:使用gcc编译文件.h,会出现了一个以.h.gch为扩展名的文件, 这是gcc的一种预编译技术——预编译头技术,就是将头文件先编译 成一种二进制中间格式,以供后续编译使用的。gcc在编译过程中会自动查找相应的.gch文件,并且自动检测其可用性,如果不可用,gcc会给出警告,然后使用对应的.h文件,抛弃当前.gch。运用了预编译头技术,gcc在后续的多次编译过程中可以节约很多的编译时间。
3、简单的范例
范例一:源文件、头文件和makefile在一个文件夹中
OBJS = main.o file1.o file2.o file3.o
CFLAGS += -D __MACRO1__
CFLAGS += -D __MACRO2__
%.o:%.c
gcc -c $(CFLAGS) $< -o $@
all:$(OBJS)
gcc $(OBJS) -o C3
clean:
rm *.o C3
范例二:源文件在文件夹src中、将生成的OBJ文件放到objs文件夹中,makefile在当前目录下
OBJS = main.o file1.o file2.o file3.o
CFLAGS += -I ./src
VPATH = src
CFLAGS += -D __MACRO1__
CFLAGS += -D __MACRO2__
%.o:%.c
gcc -c $(CFLAGS) $< -o $@
all:$(OBJS)
gcc $(OBJS) -o C3
cp *.o ./objs
rm *.o
clean:
rm -rf ./objs/*.o C3
浙公网安备 33010602011771号