Makefile的基本语法与变量

文章目录


make 的语法既多又复杂,在此列出一些基本的规则

基本规则

Makefile 的基本规则如下:

目标(target):目标文件1  目标文件2
<tab> gcc -o 预建立的执行文件 目标文件1 目标文件2

注意
命令行必须以Tab j键作为开头

  • 在Makefile 中 # 代表注释
  • 需要在命令行的(例如 gcc 这个编译器命令)的第一个字符
  • 目标 (target) 与依赖文件(就是目标文件)之间需要用 :号隔开

如果想要执行两个或以上的文件链接操作时:
举例:假如有三个文件:main.c print.c print.h
三者关系如下:main.c(主程序)依赖—>print.c 依赖—>print.h
则相应的 Makefile 可以进行如下编写:

  • 复杂一点的
test : main.o print.o
	gcc -o test main.o print.o
mian.o : main.c print.h
	gcc -c main.c
print.o : print.c print.h
	gcc -c print.c

clean:
	rm *.o
  • 最简单的(让GNU自行推导三个文件的关系)
CC := gcc
objects := main.o print.o

test : &(objects)
	$(CC) -o test $(objects)
&(objects) : print.h
main.o : main.c
print.o : print.c

clean:
	rm *.o

如此一来,我们的 Makefile 里面就具有两个目标,分别是 test 和 clean ,如果我们想要建立 test 时,输入 【make test】;如果想要清除所有 .o 文件,输入【make clean】。而如果想要先清除目标文件再编译 main 这个程序时,输入【make clean test】

【注意】
Makefile 与 bash shell 脚本语法不太相同,变量的基本语法为:

  • 变量与变量内容以 “=” 隔开,同时两边可以具有空格
  • 变量的左边不可以有 【tab】键
  • 变量与变量的内容在 “=” 两边不能具有 “:”
  • 在习惯上,变量最好以【大写字母】为主
  • 运用变量时,以 ${变量} 或 $(变量) 使用
  • 在该 shell 的环境变量是可以被套用,例如提到的 CFLAGS 这个变量
  • 在命令行模式也可以设置变量

由于 gcc 在进行编译的操作时,会主动获取 CFLAGS 这个环境变量,所以,可以直接在 shell 中定义出这个环境变量,也可以在 Makefile 文件里面去定义,更可以在命令行中设置这个东西,如:

[root@zhang ~]# CFLAGS="-Wall" make clean main
# 这个操作在使用 make 编译时,会读取 CFLAGS 的变量内容

也可以这样

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main : $(OBJS)
	gcc -o main $(OBJS) $(LIBS)
clean :
	rm -f main &(OBJS)

其中,环境变量的使用规则是这样的:

  • make 命令行后面加上的环境变量为优先;

  • Makefile 里面指定的环境变量第二;

  • shell 原来具有的环境变量第三。

  • $@ :代表当前的目标(target)

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/103677274