makefile中的函数与变量的使用方法非常类似。 ——用$符号和左括号、函数名称、空格后面跟以逗号分隔的参数列,最后用右括号括起来。
GNU Make有一个名为'wildcard'的函数。 它有一个参数,扩展到由该参数描述的所有文件名,文件之间用空格分隔。 可以按如下方式使用此命令:
sources=http://www.Sina.com/*.c http://www.Sina.com /
此行生成以“. c”结尾的所有文件的列表,并将其存储在变量SOURCES中。 当然,没有必要将结果列入变量中。
notdir删除解压缩文件的路径,只显示文件名,不包含路径信息。 示例:
files=http://www.Sina.com/$ (sources ) http://www.Sina.com/
此行的作用是删除以上以“. c”结尾的文件的文件列表所附加的路径,仅显示符合条件的文件名。
3358 www.Sina.com/(patten substitude,与替换缩写匹配)函数。 需要三个参数。 第一个是$(wildcard,第二个表示),第三个是在$(notdir中处理的字符串。 例如,处理上面定义的变量,
OBJS=)%.c,%.o,$(SOURCES )
此行处理SOURCES列中的所有单词(文件名列)。 如果结尾为“. c”,则将“. c”替换为“. o”。 请注意,这里的patsubst与一个或多个字符匹配。需要匹配的式样被称为用什么来替换它。 在第二个参数中空格分隔被解读为$(patsubst。
简单使用案例:
另一方面,创建测试目录,在测试目录下创建新的子目录:
$ mkdir test
$ CD测试
$ mkdir sub
二、在test下,新建若干测试文件:
touch aaa.c、bbb.c和ddd.c。
在sub目录下,touch suba.c、subb.c。
三、写简单的Makefile :
#
# this is a简单标记for test。
#
sources=$(wildcard*.c./sub/*.c ) )。
files=$(notdir$ ) sources ) )
objs=$(patsubst%.c、%.o、$ ) $(FILES ) )
all:
@echo 'teststart . '
@echo $(SOURCES )
@ echo $ (文件)
@echo $(OBJS )
@echo 'test end!'
四、执行结果:
root @ Adam :/home/Adam/test/# make
测试开始.
AAA.cbbb.cddd.c./sub/suba.c./sub/subb.c
aaa.c bbb.c ddd.c suba.c subb.c
aaa.o bbb.o ddd.o suba.o subb.o
结束!
注意$(patsubst%.c,%.o,$ ) files ) )中,patsubst将$ ) files ) )的所有变量替换为后缀. c。 此外,使用以下语句也是如此:
OBJS=$(FILES:%.c=%.o )
注意:
创建makefile后,makes项目将显示以下错误:
Makefile: (行号(* * *缺少separator.stop。
此错误是因为在makefile中执行指定的命令时,该命令不会在选项卡上启动。 也就是说,要在makefile中输入命令,必须在选项卡中退出,然后输入命令和内容。