有没有办法告诉automake不要解释部分的automakefile?

时间:2011-09-15 20:34:10

标签: makefile gnu-make automake

有没有办法告诉automake不要解释部分Makefile.am?

具体来说,我试图在Makefile.am中对Makefile进行编码。正如other people注意到的那样,这不起作用,因为automake解释了endif构造。

有没有办法在Makefile.am文件中转义或引用字符串,以便automake将它们逐字复制到目标Makefile中?具体来说,我不希望它在以下内容中解释endif:

ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif

4 个答案:

答案 0 :(得分:6)

automake做条件的原因是因为有些恐龙没有。也就是说,如果你真的必须这样做,你可以将你的代码片段定义为configure.ac中的变量,并将AC_SUBST定义为Makefile。这样,automake就没有机会看到它。请务必使用AM_SUBST_NOTMAKE来避免创建类似FOO = @FOO@的行。)

dnl In configure.ac:
snippet='
ifeq ($(somevar),Y)
foo
endif
'
AC_SUBST([snippet])
AM_SUBST_NOTMAKE([snippet])

## In Makefile.am:
@snippet@

我真诚地希望有比这更好的方法。

答案 1 :(得分:2)

我设法找到了另一种解决方案。您可以将要转义的位放在单独的文件中,然后执行以下操作:

$(eval include $(srcdir)/Include.Makefile)

由于automake不理解$(eval,因此只保留整条线。因此,你可以把你想要的任何东西放到另一个文件中,GNU make会愉快地阅读它。请注意,您不能直接使用include,因为Automake明白并且会进入另一个文件。

答案 2 :(得分:0)

怎么样:

SOMEVAR=$(if $(SOMEVAR),$(SOMEVAR),"default_value")

答案 3 :(得分:0)

最简单的方法是在ifdefifeqifneqelseendif之前插入一个空格。这样,automake解析器将无法识别这些关键字。请确保插入一个空格,它不能与制表符一起使用。

来源:https://patchwork.kernel.org/patch/6709921/