[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

20. 条件文

Automakeは単純な形式の条件文をサポートします.

条件文を使用する前に,configure.acファイルで AM_CONDITIONALを使用してそれを定義する必要があります (see section 5.6 Automakeが提供するAutoconfマクロ).

Macro: AM_CONDITIONAL (conditional, condition)
条件名conditionalは,文字で始まり,文字,数字,そしてアンダース コアのみを含む単純な文字列です.Automakeが`TRUE'と`FALSE'の どちらを保持しているかで異なっているはずです.

シェルのcondition(シェルのif文で使用されるのに適切なもの) は,configureが実行されるときに評価されます.すべての AM_CONDITIONALが毎回configureの実行で呼び出されるように 調整する必要があります -- AM_CONDITIONALが条件付き(例えば,シェ ルのif文)で実行される場合,結果としてautomakeが混乱します.

条件文は一般的に,configureスクリプトでユーザが提供するオプショ ンに依存します.ユーザが`--enable-debug'オプションを使用する場合, 真の条件を書く方法の例は以下のようになります.

 
AC_ARG_ENABLE(debug,
[  --enable-debug    Turn on debugging],
[case "${enableval}" in
  yes) debug=true ;;
  no)  debug=false ;;
  *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
esac],[debug=false])
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)

`Makefile.am'でその条件文を使用する方法の例は以下のようになります.

 
if DEBUG
DBG = debug
else
DBG =
endif
noinst_PROGRAMS = $(DBG)

この簡単な例で,EXTRA_PROGRAMSを使用しているものを扱うことも可能でしょ う(see section 8.1.4 プログラムの条件付コンパイル).

if文で,`!'を使用した否定も可能な,単一の変数のみを調査し たいかもしれません.else文は省略可能です.条件文は任意の深さに ネスト可能です.elseに引数を指定することも可能ですが,いずれの 場合でも,現在のifに対して使用される条件の否定となっている必要 があります.同様に,endで閉じられた条件を指定することも可能です.

 
if DEBUG
DBG = debug
else !DEBUG
DBG =
endif !DEBUG

非対称の条件文はエラーとなります.

Automakeの条件文はGNU Makeの条件文とは同じでないことに注意してください. Automakeの条件文は,configure時に`configure'スクリプトでチェック され,`Makefile.in'から`Makefile'への変換に影響を与えます. それらは,`configure'に渡すオプションと,`configure'がホスト システムについて発見した結果に基づきます.GNU Makeの条件文は, make時に調査され,makeプログラムに渡された,あるいは `Makefile'で定義された変数に基づいています.

Automakeの条件文は,どんなmakeプログラムでも動作します.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on February, 25 2004 using texi2html