makefile文件创建和使用变量(类似于c语言中的宏定义)

创建变量的目的:
用来代替一个文本字符串:
(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 $@
kang.o:kang.c kang.h
	$(CC) $(CFLAGS) -c $< -o $@
yul.o:yul.c yul.h
	$(CC) $(CFLAGS) -c $< -o $@

预定义变量:
-AR 库文件维护程序的名称,默认值为ar。AS汇编程序的名称,默认值为as.

-CC c编译器的名称,默认值为cc。 CPP C预编译器的名称,默认值为$(CC) -E

-CXX C++编译器的名称,默认值为g++.

-FC FORTRAN编译器的名称,默认值为f77

-RM 文件删除程序的名称,默认值为rm -f

自动变量:

  • $* 不包含扩展名的目标文件名称
  • $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
  • $< 第一个依赖文件的名称
  • $? 所有时间戳比目标文件晚的依赖文件,并以空格分开
  • $@ 目标文件的完整名称
  • $^ 所有不重复的目标依赖文件,以空格分开
  • $% 如果目标是归档成员,则该变量表示目标的归档成员名称

例如:

  test:f1.o f2.o main.o
        	gcc f1.o f2.o main.o -o test
       f2.o:$<
        	gcc -c -wall f2.c -o $@
       f1.o:f1.c
        	gcc -c -wall f1.c -o $@
       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在执行过程中改变目录,打印当前目录名

发布了150 篇原创文章 · 获赞 81 · 访问量 6448

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/104295725
今日推荐