Makefile patsubst';当找不到模式时,s返回值
我正在尝试将“sub make”命令发送到子目录。我有一个带有“顶级”Makefile的父目录和一个带有自己Makefile的子目录 我的父Makefile有一个目标行,如下所示:Makefile patsubst';当找不到模式时,s返回值,makefile,Makefile,我正在尝试将“sub make”命令发送到子目录。我有一个带有“顶级”Makefile的父目录和一个带有自己Makefile的子目录 我的父Makefile有一个目标行,如下所示: target%: make -C sub_dir $(patsubst target-%,%,$@) 我可以在父文件夹中执行以下操作: 清除目标并使目标全部清除(&A) 它将被解释为: 使-C子目录清洁&使-C子目录全部清洁 我希望能够做到: 瞄准 但在这种情况下,我得到: make-C sub_dir t
target%:
make -C sub_dir $(patsubst target-%,%,$@)
我可以在父文件夹中执行以下操作:
清除目标并使目标全部清除(&A)
它将被解释为:
使-C子目录清洁&使-C子目录全部清洁
我希望能够做到:
瞄准
但在这种情况下,我得到:
make-C sub_dir target.o
我希望“patsubst”找不到模式,但它将返回nothing或已测试的表达式。但它返回这个“target.o”
有人能给我解释一下吗?我怎样才能一无所获?
我尝试了这些表达,但没有成功:
make -C sub_dir $(patsubst target%,%,$@)
make -C sub_dir $(patsubst -%,%,$(patsubst target%,%,$@))
make -C sub_dir $($(patsubst -%,%,$(patsubst target%,%,$@)):.o=)
最后一个是棘手的,它给出:
make-C sub_dirmake[1]:输入目录/home/aurelian/Documents/Projects/parent/sub_dir'
make[1]:“子目标”是最新的。
make[1]:离开目录“/home/aurelian/Documents/Projects/parent/sub_dir”
cc target.o-o target
cc:target.o:没有这样的文件或目录
抄送:没有输入文件
make:**[target]错误1
target%
模式匹配,但仅与%
的至少一个字符匹配,而不是零。从GNU make手册:
模式规则中包含字符“%”(正好是其中一个)
目标;否则,它看起来就像一条普通规则。目标
是用于匹配文件名的模式;“%”与任何非空字符匹配
子字符串,而其他字符只匹配它们自己
因此target
不匹配,make使用其隐式规则来构建target
:构建target.o
,然后从target.o
构建target
。当试图找到构建target.o
的方法时,模式规则匹配且配方:
make -C sub_dir $(patsubst target-%,%,$@)
是扩大的。但是由于target.o
与target-%
不匹配,patsubst
什么也不做,您的配方变成:
make -C sub_dir target.o
问题是模式必须匹配一个或多个字符。因此,这种模式:
target%:
与目标名称目标
不匹配,因为没有剩余字符与模式匹配
因此,make
查找另一个可用于生成target
的隐式规则,并找到内置规则:
% : %.o
因此它尝试构建target.o
。此目标将匹配模式target%
,其词干为.o
,因此它尝试使用您的规则来构建该模式
为了明确回答您的问题,任何与patsubst
中的替换模式不匹配的单词都将被传递而不进行更改