[linux C]编写makefile

make工具是linux下帮助我们管理工程的一个工具,使用之前我们需要将编译、链接规则写在makefile文件里边,完成后在命令行中输入一个make就会自动执行。
比如在一个文件夹下有main.c、tool1.c、tool1.h、tool2.c、tool2.h这几个文件,调用关系如下图所示。
[linux C]编写makefile_第1张图片
其中函数调用关系
[linux C]编写makefile_第2张图片
在同步目录下使用vim新建一个makefile文件。

zx@zx-virtual-machine:~/Code/MakefileTest$ vim makefile

1 写法一(普通)

命令格式:
目标文件(target):依赖文件
执行命令(command,command前面一定要一个tab键,不然无法识别)
依赖文件 参数(-o -c -wall之类的) 目标文件(target)
注意:makeflie里边的书写是由规则的,命令前面一定要有一个tab键,不然无法识别到。

[linux C]编写makefile_第3张图片
命令

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命令执行了
[linux C]编写makefile_第4张图片
最后会生成一个tool可执行文件
在这里插入图片描述
一般在makefile最后边加一个clean命令,这样可以删除所有.o文件 和 tool文件。
[linux C]编写makefile_第5张图片
执行make clean命令清除数据
[linux C]编写makefile_第6张图片

2 写法二(简洁)

使用变量代替其中一部分,在使用是使用$(变量名)来代替
[linux C]编写makefile_第7张图片
[linux C]编写makefile_第8张图片

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)都相同,这里可以用‘^’符号代替依赖文件,使用‘@’代替目标文件。
[linux C]编写makefile_第9张图片
最后编译出来的效果
[linux C]编写makefile_第10张图片
以上三种方法均可自行尝试,习惯用哪种就用哪种。如有错误欢迎指正。

如有侵权请联系本人删除!!!

你可能感兴趣的:(linuxC编程,linux,c语言,运维)