搜索模式中包含计算变量的makefile

搜索模式中包含计算变量的makefile,makefile,bison,flex-lexer,Makefile,Bison,Flex Lexer,我正在处理一个makefile,我认为它应该在模式中使用计算变量。作为一个更大项目的一部分,我有三个不同的解析器,它们有很多重叠,并且以模块化的形式编写,以便能够更容易地维护公共组件。makefile的相关部分如下所示: parser1object = firstobject parser2object = secondobject parser3object = thirdobject $(srcdir)/HIG%.y: \ $(srcdir)/HIG%.y.1 \ $(s

我正在处理一个makefile,我认为它应该在模式中使用计算变量。作为一个更大项目的一部分,我有三个不同的解析器,它们有很多重叠,并且以模块化的形式编写,以便能够更容易地维护公共组件。makefile的相关部分如下所示:

parser1object = firstobject
parser2object = secondobject
parser3object = thirdobject


$(srcdir)/HIG%.y: \
    $(srcdir)/HIG%.y.1 \
    $(srcdir)/common.tokens \
    $(srcdir)/HIG%.y.2   \
    $(srcdir)/common.syntax  \
    $(srcdir)/HIG%.y.3
sed 's/parserObjects/S((S*)object))/g' \
         $(srcdir)/HIG$*.y.2        >$*temp.tmp
sed 's/parserObjects/S((S*)object))/g' \
         $(srcdir)/common.syntax >common.syntax.tmp
cat $(srcdir)/HIG$*.y.1 \
    $(srcdir)/common.tokens  \
    $*temp.tmp common.syntax.tmp \
    $(srcdir)/HIG$*.y.3 >$(srcdir)/HIG$*.y
rm -f $*temp.tmp
rm -f common.syntax.tmp
也就是说,我想将一些文件连接到bison的几个语法文件中的一个。在公共语法文件中,我有一些对泛型对象的引用,需要在相应的解析器中将其替换为对象的名称。然而,因为它是在一个模式中,所以变量替换机制似乎不像我希望的那样工作。(对于parser1,我想将
$($*)对象
更改为
$(parser1object)
,最后更改为
第一个对象

我怎样才能实现我想做的事


顺便说一句,由于模式替换,这似乎与{}

不同,那么这个代码段不起作用了吗?问题是您使用的是
S((S*)对象))
而不是
$($*)对象))
?而且,参数是错误的。像
$*
这样的单字母变量不需要它们,但如果使用它们,它们必须在美元符号和变量之间,因此需要
$($(*)对象)
而不是
$($*)对象)
。但是我会写
$($*对象)