我正在研究一个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
也就是说,我想将一些文件连接成一个用于野牛的几个语法文件之一。在通用语法文件中,我有一些对通用对象的引用,需要用相应解析器中对象的名称替换。但是,因为它位于模式内部,所以变量替换机制似乎不像我希望的那样工作。 (对于parser1,我想将$($*)object
更改为$(parser1object)
,最后更改为firstobject
。
我怎样才能达到我想做的目的?
顺便说一句,由于模式替换,这似乎与{Makefile and computed variable names}
不同