2011-09-15 10 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は条件文を行う理由があります。つまり、実際にこれを行う必要がある場合、スニペットを変数とAC_SUBSTに定義してMakefileに入れることができます。そうすれば、automakeはそれを見る機会を得ることはありません。 FOO = @[email protected]のような行を作成しないようにAM_SUBST_NOTMAKEを使用することを忘れないでください)

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変数名ではない')。 –

2

私は別の解決策を見つけることができました。あなたは別のファイルにあなたへのエスケープされたビットを配置し、実行することができます。

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

Automakeはそれだけで無傷で全体のラインを残し$(eval理解していないので。したがって、あなたが望むものを他のファイルに入れて、GNU makeがそれをうれしく読むことができます。 Automakeはそれを理解しているので、他のファイルに入るので、includeを直接使用することはできません。

+0

私はこのソリューションを大いに好んでいます。 –