首页 > 编程知识 正文

makefile中指定编译器,makefile中目标和依赖

时间:2023-05-05 04:42:06 阅读:174748 作者:4546

如何在Makefile中使用wildcard

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

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

#示例标记文件

Objects:=$(Patsubst%.c,%.o,$(wildcard*.c ) )

foo : $(objects )

cc -o foo $(objects )

在这里,我们使用了make的隐式规则来编译. c的源文件。 对变量的代入也使用了特别的符号(:=)。

1、通配符:扩展通配符

2、notdir :去除路径

3、patsubst :替换通配符

示例:

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

$ mkdir test

$ cd test

$ mkdir sub

在test下创建a.c和b.c两个文件,在sub目录下创建sa.c和sb.c两个文件

制作简单的makefile

src=$(wildcard*.c./sub/*.c ) )

DIR=$(notdir$ ) src ) )

obj=$(patsubst%.c,%.o,$ ) (dir ) )

all:

@echo $(src )

@echo$(dir ) )。

@echo $(obj )

@echo 'end '

执行结果分析:

第一行输出:

a.c b.c ./sub/sa.c ./sub/sb.c

wildcard将解压缩指定目录. /和./sub/下所有后缀为c的所有文件。

第二行输出:

a.c b.c sa.c sb.c

notdir从路径信息中删除解压缩的文件

第三行输出:

a.o b.o sa.o sb.o

$(patsubst%.c,%.o,$ ) dir ) )中,patsubst为$ ) dir )的变量将与后缀. c匹配的所有内容替换为. o。

任何输出。

或可以使用

obj=$(dir:%.c=%.o )

效果也一样。

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

标准的格式是

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

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

今天研究makefile的时候,在网上看到了一篇报道。 介绍了如何使用函数wildcard获得指定目录中所有c语言源程序的文件名。 现在,您不再需要手动指定需要编译的. c文件。 方法如下。

SRC=$(wildcard *.c )

指定编译当前目录中的所有. c文件,如果有子目录,例如inc,请添加wildcard函数,如下所示:

SRC=$(wildcard*.c ) $(wildcard inc/*.c ) )。

也可以指定程序集资源。

ASRC=$(wildcard *.S )

从3http://blog.csdn.net/Liang Kaiming/article/details/6267357

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