2011-09-15 40 views
4

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

具体来说,我试图在Makefile.am中对Makefile进行编码。由于other people已经注意到,这是行不通的,因为automake解释了endif构造。

是否有任何方法在Makefile.am文件中转义或引用字符串,以便automake将它们逐字复制到目标Makefile中?具体来说,我不希望它解释ENDIF在类似:

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

回答

6

原因automake的条件语句确实是因为有些恐龙使得没有。也就是说,如果你真的必须这样做,你可以将你的代码片段定义为configure.acAC_SUBST中的一个变量,并将它写入你的Makefile。这样,automake就不会有机会看到它。请记住,使用AM_SUBST_NOTMAKE以避免造成像FOO = @[email protected]线)

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

和:

## In Makefile.am: 
@[email protected] 

我真诚地希望有一个更好的办法莫过于此。

+0

这是迄今为止我见过的最好的解决方案 –

0

如何:

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

这似乎解决了我的具体问题,但会导致automake发出警告:'如果$(SOMEVAR:非POSIX变量名'。因此,它仍然是很好的知道如何在automake文件中转义/引用。 –

2

我设法找到不同的解决方案。你可以把你要被转义位在一个单独的文件,然后执行:

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

因为automake的不理解$(eval它只是离开了整条生产线的完整。因此,你可以把任何你想要的东西放到另一个文件中,GNU make会很高兴地阅读它。请注意,您不能直接使用include,因为Automake会明白这一点,并会进入其他文件。

+0

我非常喜欢这个解决方案,它也适用于更多。 –

相关问题