2011-09-15 68 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

我非常喜歡這個解決方案,它也適用於更多。 –

相關問題