-
文件中拥有Makefile和makefile,使用命令
make
优先运行的是小写的makefile。 -
创建了五个文件:
main.c
、tool1.c
、tool1.h
、tool2.c
、tool2.h
。//main.c #include "tool1.h" #include "tool2.h" int main() { mytool1(); mytool2(); return 0; }
//tool1.c #include <stdio.h> #include "tool1.h" void mytool1() { printf("tool1 print\n"); }
//tool1.h #ifndef TOOL1_H__ #define TOOL1_H__ void mytool1(); #endif
//tool2.c #include <stdio.h> #include "tool2.h" void mytool2() { printf("tool2 print\n"); }
//tool2.h #ifndef TOOL2_H__ #define TOOL2_H__ void mytool2(); #endif
-
makefile编译使用命令为:
make
-
有
clean
功能可以使用命令:make clean
-
makefile文件普通写法:
mytool:main.o tool1.o tool2.o # mytool为编译完的总目标也是可执行文件,依赖于main.o tool1.o tool2.o gcc main.o tool1.o tool2.o -o mytool main.o:main.c #main.o依赖于main.c gcc main.c -c -Wall -g -o main.o #-c编译,-Wall警告,-g方便调试,-o指定名字mian.o tool1.o:tool1.c gcc tool1.c -c -Wall -g -o tool1.o tool2.o:tool2.c gcc tool2.c -c -Wall -g -o tool2.o clean: #习惯性会加上删除 rm *.o mytool -rf
写完makefile可以使用
make
进行编译,编译完成后生成可执行文件mytool
,使用命令./mytool
可以执行。 -
makefile文件加变量:
OBJS=main.o tool1.o tool2.o #用变量OBJS代替main.o tool1.o tool2.o cc=gcc #用变量cc代替gcc mytool:$(OBJS) #用$(OBJS)代替main.o tool1.o tool2.o $(cc) $(OBJS) -o mytool #用$(CC)代替gcc main.o:main.c $(cc) main.c -c -Wall -g -o main.o tool1.o:tool1.c $(cc) tool1.c -c -Wall -g -o tool1.o tool2.o:tool2.c $(cc) tool2.c -c -Wall -g -o tool2.o clean: rm *.o mytool -rf
-
makefile文件加变量和使用:
OBJS=main.o tool1.o tool2.o
cc=gcc
CFLAGS+=-c -Wall -g # +=不管前面发生什么,加上这个功能。用CFLAGS代替编译、警告、调试
mytool:$(OBJS)
$(cc) $(OBJS) -o mytool
main.o:main.c
$(cc) main.c $(CFLAGS) -o main.o #$(CFLAGS)代替-c -Wall -g
tool1.o:tool1.c
$(cc) tool1.c $(CFLAGS) -o tool1.o
tool2.o:tool2.c
$(cc) tool2.c $(CFLAGS) -o tool2.o
clean:
$(RM) *.o mytool -r #用大写的RM代替rm以及-rf
-
makefile文件
OBJS=main.o tool1.o tool2.o cc=gcc CFLAGS+=-c -Wall -g mytool:$(OBJS) $(cc) $^ -o $@ # $^为上一句中依赖的文件$(OBJS), $@为上一句的目标文件mytools main.o:main.c $(cc) $^ $(CFLAGS) -o $@ tool1.o:tool1.c $(cc) $^ $(CFLAGS) -o $@ tool2.o:tool2.c $(cc) $^ $(CFLAGS) -o $@ clean: $(RM) *.o mytool -r
-
makefile的简化文件
OBJS=main.o tool1.o tool2.o
cc=gcc
CFLAGS+=-c -Wall -g
mytool:$(OBJS)
$(cc) $^ -o $@
%.o:%.c # %为通配符
$(cc) $^ $(CFLAGS) -o $@
clean:
$(RM) *.o mytool -r