Next: Running the Compiler, Previous: Writing Test Programs, Up: Writing Tests
いくつかのソースファイルでプリプロセッサを実行する必要があるときもありま す.通常はプロジェクトをコンパイルする必要があり,プリプロセッサ を実行する必要があることは滅多に無いので,そうすることは,普通は悪 い考えです.そのため,きっとプリプロセッサではなくコンパイラを実行した いと思うでしょう.安易な道をたどる誘惑に逆らってください.
それにもかかわらず,プリプロセッサを実行する必要がある場合,
AC_PREPROC_IFELSE
を使用してください.
inputで現在の言語(see Language Choice)のプリプロセッサを実行し, 成功したらシェルコマンドaction-if-trueを実行し,そうでなければ action-if-falseを実行します.inputは
AC_LANG_PROGRAM
と その仲間で作成することが可能です.このマクロは
CPPFLAGS
を使用しますが,-g,-Oなど は多くのCプリプロセッサで有効なオプションではないので,CFLAGS
は 使用しません.予期せぬ異常終了は,通常
AC_MSG_FAILURE
で報告します.
例えば以下のようにします.
AC_INIT(Autoconf Documentation, 2.59, bug-autoconf@gnu.org) AC_DEFINE([HELLO_WORLD], ["Hello, World\n"]) AC_PREPROC_IFELSE( [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]], [[fputs (hw, stdout);]])], [AC_MSG_RESULT([OK])], [AC_MSG_FAILURE([unexpected preprocessor failure])])
結果は以下のようになります.
checking for gcc... gcc checking for C compiler default output... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking how to run the C preprocessor... gcc -E OK
マクロ
AC_TRY_CPP
(see Obsolete Macros)は,
AC_PREPROC_IFELSE
の役目を果たすために使用されていましたが,その引
数を二重の引用符で囲んでいるので,精巧なソースで使用することが不可能でし
た.マクロAC_TRY_CPP
のAC_PREPROC_IFELSE
をような古い使い方
を取り除くことも推奨しますが,最初にコンパイラではなくプリプロセッ
サを実行する必要があるのかを確かめることを推奨します.