Previous: AC_LIBOBJ vs LIBOBJS, Up: Autoconf 2.13
AC_FOO_IFELSE
対AC_TRY_FOO
Autoconf 2.50以来,内部コードでは,一方ではAC_PREPROC_IFELSE
,
AC_COMPILE_IFELSE
,AC_LINK_IFELSE
,そして
AC_RUN_IFELSE
を使用し,もう一方では反対されている
AC_TRY_CPP
,AC_TRY_COMPILE
,AC_TRY_LINK
,そして
AC_TRY_RUN
の代わりにAC_LANG_SOURCES
と
AC_LANG_PROGRAM
を使用しています.その動機は以下にあります.
AC_TRY_COMPILE
などは,その引数を
二重の引用符で囲みます.
構文の変更だけでなく,哲学的な変更もなされました.正確さの代償として速度 を用いたことを強調しておきますが,今日のAutoconfは,テスティングフレーム ワークの正確さを進展させていて,う〜ん...速度の代償になっています.
なされてはいない完全な例として,ヘッダファイルが,型,構造体,構
造体のメンバー,または関数といった特定の宣言を含んでいるかどうかを調べる
方法が以下にあります.ヘッダファイルで直接grep
を実行する代わりに,
AC_EGREP_HEADER
を使用してください.調査している‘#include’ 以
外のヘッダファイルでシンボルを定義しているシステムもあるでしょう.
(悪い)例として,シンボルが,ヘッダファイルで定義されているか,またはC プ リプロセッサで定義されているかを,Cプリプロセッサを調査すべきではない理 由がは以下にあります.
AC_EGREP_CPP(yes, [#ifdef _AIX yes #endif ], is_aix=yes, is_aix=no)
上記の例では,適切に書かれている(i)AC_LANG_PROGRAM
を使用し,(ii)
コンパイラを実行すべきです.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#if !defined _AIX # error _AIX not defined #endif ]])], [is_aix=yes], [is_aix=no])