其他分享
首页 > 其他分享> > makefile基本语法

makefile基本语法

作者:互联网

1.makefile的引入

main.c为主体,input.c负责接收从键盘输入的数值,calcu.h进行任意两个数相加
main.c
image
input.c
image
input.h
image
calcu.c
image
calcu.h
image
这里面当代码特别多的时候
gcc main.c input.c calcu.c -o main
这行代码就比较长
有一种办法是分别把main,input, calcu编译成点o文件,然后再gcc连接
gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o - o main
这样以后只要我修改了calcu.c, 只需要gcc -c calcu.c,然后再链接,节省了时间
但是这样编译的代码量增大了,所以采用了makefile

2.Makefile

image

3.makefile基本语法

基本语法

目标:依赖集合
命令1
命令2
(命令列表中每条命令必须以TAB键开始, 不能用空格)
默认的第一个目标就是终极目标

makefile变量的使用

# 变量使用
objects = main.o input.o calcu.o
main: $(objects)
	gcc -o main $(objects)

image
不加@就会把所执行的命令打印出来的
注意此时输出的是shaozheming,=号的值取决于name的值,加上:=就不会这个问题
?=:如果前面赋值了就用前面的值, 没有赋值就用?=后面的值
+=:类似字符串拼接

makefile模式规则

类似通配符的规则
%.o : %.c

自动化变量

上面的通配符规则虽然大大减少了代码量,但是在
gcc -c main.c 这里面的main不能换成%
常用的几种:
$@ : 规则中的目标集合,如果有多个目标,表示匹配模式中定义的目标集合
$< : 依赖文件集合的第一个文件,如果依赖文件是以%定义的,那么这个就是符合模式的一系列文件集合
$^ : 所有依赖文件集合,使用空格分开。如果在依赖文件中有多个重复文件,他会去除重复文件,只保留一份
image

伪目标

伪目标是为了避免Makefile中定义的只执行命令的目标和工作目录下的市级文件出现名字冲突,比如clean,这个就是只执行下面的命令而不是生成文件,因此工作目录下永远不会存在文件clean,所以属于make clean,这个命令一定执行。但当我们手贱在工程目录下创建一个clean文件,规则因为没有依赖文件,所以这个clean文件是最新的,那后面的rm命令也不会执行。为避免这个问题,可以将clean声明为伪目标。声明方式为:
.PHONY : clean

标签:基本,文件,gcc,makefile,calcu,语法,clean,input,main
来源: https://www.cnblogs.com/yoshinb/p/15548337.html