有没有办法告诉automake不要解释部分Makefile.am?
具体来说,我试图在Makefile.am中对Makefile进行编码。正如other people注意到的那样,这不起作用,因为automake解释了endif构造。
有没有办法在Makefile.am文件中转义或引用字符串,以便automake将它们逐字复制到目标Makefile中?具体来说,我不希望它在以下内容中解释endif:
ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
答案 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)
最简单的方法是在ifdef
,ifeq
,ifneq
,else
和endif
之前插入一个空格。这样,automake解析器将无法识别这些关键字。请确保插入一个空格,它不能与制表符一起使用。