首页 > 编程知识 正文

前端使用makefile,linux下makefile教程

时间:2023-05-03 13:23:59 阅读:174809 作者:3135

makefile规则会自动展开通配符。 但是,对于变量定义和函数引用,通配符无效。 在这种情况下,如果通配符必须有效,则必须使用函数" wildcard "。 其使用方法为$(wildcard PATTERN…)。 makefile将在以空格分隔的与此模式匹配的所有现有文件的列表中展开。 如果没有与此模式匹配的文件,函数将忽略模式字符并返回空。 需要注意的是,这种情况下规则中通配符的展开和上一小节中通配符的不同。

通常,您可以使用“(wILDCARD.C )”来获取工作目录中记录的所有. c文件的列表。 使用复杂的用法,可以使用(wildcard *.c )来获取工作目录中所有. c文件的列表。 复杂的使用方法; 您可以使用(wildcard.c )来取得工作目录中所有. c档案的清单。 复杂的使用方法; 您可以先使用「(patsubst %.c,%.o,$ ) wildcard*.c」函数来取得工作目录中. c档案的清单。 然后,用. o替换列表中所有文件名的后缀. c。 这样就得到了可以在当前目录中生成的. o文件的列表。 因此,可以在单个目录中使用以下makefile来编译工作目录中的所有. c文件,最后将其连接到可执行文件:

# samplemakefileobjects :=$ (patsubst %.c,%.o,$(wildcard*.c ) ) foo:$ ) objects (cc-ofoo $ ) objects

1、通配符:扩展通配符

2、notdir :去除路径

3、patsubst :替换通配符

示例:

创建测试目录,然后在测试目录下创建名为sub的子目录

在$mkdirtest$CDtest$mkdirsubtest下,创建a.c和b.c两个文件,并在sub目录下,创建sa.c和sb.c两个文件

制作简单的makefile

src=$(wildcard*.c./sub/*.c ) dir=$ ) notdir$(src ) ) obj=$(Patsubst%.c,%.o,$ () dir ) ) aaaaad

第一行输出:

a.CB.c./sub/sa.c./sub/sb.cwildcard将解压缩指定目录.//和./sub/下所有后缀为c的文件。

第二行输出:

a.c b.c sa.c sb.c notdir从路径信息中删除解压缩的文件

第三行输出:

a.ob.osa.osb.o(Patsubst ) patsubst%.c,%.o,) Patsubst(dir ) )中,patsubst使) d i r )中的变化量一致,然后可以使用obj=(dir )变量进行任何输出。 或者,也可以将obj=(dir )变量与后缀. c匹配的所有内容替换为. o。 任何输出。 或者,可以使用obj=(dir:%.c=%.o )

效果也一样。

在此使用makefile的替换引用规则。 也就是说,用指定的变量替换其他变量。

标准的格式是

${var:a=b}或${var:a=b}

这意味着将变量var中每个值的末尾a替换为b

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