make工具是linux下帮助我们管理工程的一个工具,使用之前我们需要将编译、链接规则写在makefile文件里边,完成后在命令行中输入一个make就会自动执行。
比如在一个文件夹下有main.c、tool1.c、tool1.h、tool2.c、tool2.h这几个文件,调用关系如下图所示。
其中函数调用关系
在同步目录下使用vim新建一个makefile文件。
zx@zx-virtual-machine:~/Code/MakefileTest$ vim makefile
1 写法一(普通)
命令格式:
目标文件(target):依赖文件
执行命令(command,command前面一定要一个tab键,不然无法识别)
依赖文件 参数(-o -c -wall之类的) 目标文件(target)
注意:makeflie里边的书写是由规则的,命令前面一定要有一个tab键,不然无法识别到。
命令
tool:main.o tool1.o tool2.o
gcc main.o tool1.o tool2.o -o tool
main.o:main.c
gcc main.c -c -o main.o
tool1.o:tool1.c
gcc tool1.c -c -o tool1.o
tool2.o:tool2.c
gcc tool2.c -c -o tool2.o
clean:
rm *.o tool -rf
编写完规则后就可以使用make命令执行了
最后会生成一个tool可执行文件
一般在makefile最后边加一个clean命令,这样可以删除所有.o文件 和 tool文件。
执行make clean命令清除数据
2 写法二(简洁)
使用变量代替其中一部分,在使用是使用$(变量名)来代替
OBJ = main.o tool1.o tool2.o
CC = gcc #默认系统是自带的,这里再重复一下
CFLAGS += -c -g -o
tool:$(OBJ)
$(CC) $(OBJ) -o tool
main.o:main.c
$(CC) main.c $(CFLAGS) main.o
tool1.o:tool1.c
$(CC) tool1.c $(CFLAGS) tool1.o
tool2.o:tool2.c
$(CC) tool2.c $(CFLAGS) tool2.o
clean:
rm *.o tool -rf
写法三(精简)
如上图所示,命令行中的依赖文件(OBJ)和目标文件(tool)都相同,这里可以用‘^’符号代替依赖文件,使用‘@’代替目标文件。
最后编译出来的效果
以上三种方法均可自行尝试,习惯用哪种就用哪种。如有错误欢迎指正。
如有侵权请联系本人删除!!!