首页 > 编程知识 正文

makefile中的循环(makefile展开)

时间:2023-05-05 04:18:09 阅读:75827 作者:3750

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中输入命令,必须在选项卡中退出,然后输入命令和内容。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。