许多程序员都会在自己的Makefile文件中将第一个目标定义为all然后再列出其他从属目标。这个约定可以明确地告诉make,在未指定特定目标时,默认应该创建哪个目标。
1 依赖关系
先写目标的名称,然后紧跟着一个冒号,接着是空格或TAB,最后是空格或TAB隔开的文件列表。如果想一次创建多个文件,可以利用伪目标all。假如程序由myapp和手册myspp.1组成,可以用下面的语句
义:
all: myall myapp.1
2 规则
在Makefile中空格和TAB是有区别的。规则所在行必须以TAB开头。如果Makefile中的某行以空格结尾,这可能会导致make命令的失败
3 注释
#开头为注释
4 Makefile中的宏
使用语句MACRONAME=value定义宏,$(MACRONAME)或${MACRONAME}引用宏。命令行的宏定义覆盖Makefile中的宏定义。在Makefile之外用宏时,宏定义必须以单参数的形式传递,所以避免在宏定义中使用空格或给宏定义加上引号。
make的内置宏会随着Makefile的处理进展而发生变化。
宏 | 定义 |
$? | 当前目标所依赖的文件列表中比当前目标文件还要新的文件 |
$@ | 当前目标的名字 |
$< | 当前依赖文件的名字 |
$* | 不包括后缀名的当前依赖文件的名字 |
两个特殊字符(出现在命令前):
– : 忽略所有错误
@ :不要将该命令显示在标准输出上
5 多个目标 6 内置规则
推导规则,make -p查看所有的内置规程
7 后缀和模式规则
make也支持通配符语法的模式规则
8 用make管理函数库
该规则常见形式
.c.a:
$(CC) –c $(CFLAGS) $<
$(AR) $(ARRFLAGS) $@ $* .o
$(AR) 的默认取值是ar
$(ARRFLAGS)的默认取值是rv
9 makefile和子目录
mylib.a:
(cd mylibdirectory;$(MAKE))
用括号将两个命令括起来,确保他们只被一个单独的shell处理
10 GNU make和gcc
gcc –MM
生成项目的依赖关系
转载于:https://blog.51cto.com/honglei/924048
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110370.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...