Makefile 基本语法 和 使用

Makefile基本语法

target… : prerequisites …
command
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)

Makefile创建变量的目的

用来代替一个文本字符串:
1.系列文件的名字
2. 传递给编译器的参数
3. 需要运行的程序
4. 需要查找源代码的目录
5. 你需要输出信息的目录
6. 你想做的其它事情。

自定义变量

x = a            变量在声明时需要给予初值
$(x)或${x}       取值
如果你要使用真实的 $ 字符,那么你需要用 $$ 来表示。

Makefile变量的赋值

在这里插入图片描述

自动变量

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

Makefile的隐含变量

AR     		库文件维护程序的名称,默认值为ar。
AS     		汇编程序的名称,默认值为as。
CC     		C编译器的名称,默认值为cc。
CPP   		C预编译器的名称,默认值为$(CC)  –E。
CXX    		C++ 编译器的名称,默认值为g++。
FC     		FORTRAN编译器的名称,默认值为f77
RM     		文件删除程序的名称,默认值为rm -f
ARFLAGS 	 库文件维护程序的选项,无默认值。
ASFLAGS 	 汇编程序的选项,无默认值。
CFLAGS  	 C编译器的选项,无默认值。
LDFLAGS      链接器的选项,无默认值
CPPFLAGS	 C预编译的选项,无默认值。
CXXFLAGS	 C++编译器的选项,无默认值。
FFLAGS	FORTRAN编译器的选项,无默认值

Makefile的条件判断

 ifeq                                 判断是否相等
 ifneq                               判断是否不相等
 ifdef                                判断是否定义过
 ifndef 	                      判断是否未定义过

Makefile函数

基本语法:
$(<function> <arguments>)
或是
${<function> <arguments>}
$(wildcard PATTERN)
功能:列出当前目录下所有符合模式“PATTERN”格式的文件名。
返回:空格分割的、存在当前目录下的所有符合模“PATTERN”的文件名。
说明:“PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。
示例:$(wildcard *.c)返回值为当前目录下所有.c源文件列表。
$(patsubst <pattern>,<replacement>,<text>)
名称:模式字符串替换函数。
功能:查找 <text> 中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式 <pattern> ,
	       如果匹配的话,则以 <replacement> 替换。
	       这里, <pattern> 可以包括通配符 % ,表示任意长度的字串。
	       如果 <replacement> 中也包含 % ,那么, <replacement> 中的这个 % 将是 <pattern> 中的那个 % 所代表的字串。
	       (可以用 \ 来转义,以 \% 来表示真实含义的 % 字符)
返回:函数返回被替换过后的字符串。
示例:
$(patsubst %.c,%.o,x.c.c bar.c)
把字串 x.c.c bar.c 符合模式 %.c 的单词替换成 %.o ,返回结果是 x.c.o bar.o

Makefile自定义函数

示例:
$(call <expression>,<parm1>,<parm2>,<parm3>...)


define MYFUN
	echo "******"
	echo $(0)
	echo $(1)
	echo $(2)
endef

$(call MYFUN, 10, 20)

make的使用

-C         dir读入指定目录下的Makefile
-f           file读入当前目录下的file文件作为Makefile
-i           忽略所有的命令执行错误
-n          只打印要执行的命令,但不执行这些命令	
-s          在执行命令时不显示命令
-w          如果make在执行过程中改变目录,打印当前目录名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值