Automakeは単純な形式の条件文をサポートします.
条件文を使用する前に,configure.inファイルでAM_CONDITIONAL
を使用してそれを定義する必要があります(see section Automakeが提供するAutoconfマクロ).
シェルの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 プログラムの条件付コンパイル).
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プログラムでも動作します.
Go to the first, previous, next, last section, table of contents.