makefile文件创建和使用变量(类似于c语言中的宏定义)
程序员文章站
2024-03-23 10:14:46
...
创建变量的目的:
用来代替一个文本字符串:
(1)系列文件的名字
(2)传递给编译器的参数
(3)需要查找源代码的目录
(4)需要运行的程序
(5)你需要输出信息的目录
(6)你想做的其它事情
变量定义的两种方式:
(1)递归展开方式 VAR=var
(2)简单方式 VAR:=var
变量使用$(VAR)
用 $ 则用 $$来表示
例如:
OBJS=kang.o yul.o
CC=gcc
CFLAGS=-Wall -o -g
sunq:$(OBJS) -o sunq
kang.o:kang.c kang.h
$(CC) $(OBJS) -o sunq
kang.o:kang.c kang.h
$(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o:yul.c yul.h
$(CC) $(CFLAGS) -c yul.c -o yul.o
OBJS=kang.o yul.o
CC=gcc
CFLAGS=-Wall -o -g
sunq:$(OBJS) -o sunq
kang.o:kang.c kang.h
$(CC) $^ -o [email protected]
kang.o:kang.c kang.h
$(CC) $(CFLAGS) -c $< -o [email protected]
yul.o:yul.c yul.h
$(CC) $(CFLAGS) -c $< -o [email protected]
预定义变量:
-AR 库文件维护程序的名称,默认值为ar。AS汇编程序的名称,默认值为as.
-CC c编译器的名称,默认值为cc。 CPP C预编译器的名称,默认值为$(CC) -E
-CXX C++编译器的名称,默认值为g++.
-FC FORTRAN编译器的名称,默认值为f77
-RM 文件删除程序的名称,默认值为rm -f
自动变量:
- $* 不包含扩展名的目标文件名称
- $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
- $< 第一个依赖文件的名称
- $? 所有时间戳比目标文件晚的依赖文件,并以空格分开
- [email protected] 目标文件的完整名称
- $^ 所有不重复的目标依赖文件,以空格分开
- $% 如果目标是归档成员,则该变量表示目标的归档成员名称
例如:
test:f1.o f2.o main.o
gcc f1.o f2.o main.o -o test
f2.o:$<
gcc -c -wall f2.c -o [email protected]
f1.o:f1.c
gcc -c -wall f1.c -o [email protected]
main.o:main.c
gcc -c -wall main.c -o main.o
.PHONY:clean #添加为目标
clean:
rm *.o test
Make的使用:
直接运行make
选项
-c dir读入指定目录下的makefile
-f file读入当前目录下的file文件作为makefile
-i 忽略所有的命令执行错误
-I dir指定被包含的makefile所在目录
-n 只打印要执行的命令,但不执行这些命令
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w如果make在执行过程中改变目录,打印当前目录名
上一篇: 洛谷试炼day1:津津的储蓄计划
下一篇: 基于select的回声服务器