欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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在执行过程中改变目录,打印当前目录名

相关标签: Linux