2017-06-13 7 views
0

私はちょうどautotoolsを使い始めています.Duret-Lutzのチュートリアルをよく読んで、GNU gettextを使うCのhelloの世界を手に入れました。autoconfのライブラリ検索パスにディレクトリを追加する方法

AM_CFLAGSとAM_LDFLAGSはMakefile.amで適切に設定され、コードはコンパイルされて正常に実行されます。

問題は、autoconfがAM_CFLAGSとAM_LDFLAGSがコンパイラに検索を指示しているディレクトリで、config.hのHAVE_GETTEXT_H、HAVE_LIBINTLなどのマクロを定義していないということです。

AC_CHECK_LIBとAC_CHECK_HEADERSを使用しているときに、configure.acでライブラリを補完して検索するディレクトリを含めるにはどうすればよいですか?

+0

例を挙げることはできますか?通常、ユーザは、非標準ライブラリの場所に './configure CFLAGS = -I/path/to/gettext/include LDFLAGS = -L/path/to/gettext/lib'のようなものを使用します。 AC_CHECK_HEADERS'と 'AC_CHECK_LIB'マクロを正しく呼び出すことができます。たとえば、[この回答](https://stackoverflow.com/a/10210401/539810)を参照してください。 –

+0

@ChronoKitsune私は、これを行うための環境変数を渡すことが最善の方法かもしれないと認識していますが、私は、非標準的なライブラリの場所をコードに追加する方法を期待していました。 – klmanion

答えて

2

私は元の質問を誤解していると思いますが、私の他の回答はそれ自体が間違っているので、別の回答を追加します。 AC_CHECK_*

CFLAGS_backup="${CFLAGS}" 
LDFLAGS_backup="${LDFLAGS}" 
CFLAGS="-I/path/to/an/additional/include/ ${CFLAGS}" 
LDFLAGS="-L/path/to/the/lib/ ${LDFLAGS}" 

AC_CHECK_HEADER(...) 
AC_CHECK_LIB(...) 

## reset CFLAGS and LDFLAGS 
CFLAGS="${CFLAGS_backup}" 
LDFLAGS="${LDFLAGS_backup}" 

あなたは、通常の変数としてGETTEXT_CFLAGSまたはLIBINTL_LIBSを設定し、使用するためにそれらをエクスポートしたい:AC_CHECK_HEADERAC_CHECK_LIBS 1でカスタムパスを使用するためには

は(一時的に)応じCFLAGSLDFLAGSを設定する必要がありますそれぞれ、AC_SUBST([GETTEXT_CFLAGS])およびAC_SUBST([LIBINTL_LIBS])ごとにオートバイで。

残念ながら、configure.acのAM_CFLAGSまたはAM_LDFLAGSにアクセスすることはできません。

今、あなたは便宜上

AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff> 
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff> 

を使用することができますMakefile.amで、一般的に、あなたはどちらかAC_ARG_WITHAC_ARG_VARを経由して、だけでなく、ユーザにパラメータを公開したいので、彼らは一緒に--with-gettextまたはLIBINTL_LIBS=...を使用することができますconfigureコマンドを実行します。

「autoconf」と表示されているのは、本当にm4だけです。これは、上記のマクロを自分でラップすることができます。ここでgettextについて話しているのを見ると、既にそのようなことがあります:、gettextizeを呼び出した後にconfigure.acで使用できるm4マクロ。

1

の代わりにHAVE_<HEADER>_Hのトークンを定義するAC_CHECK_HEADERSを使用してください。単数形では、ACTION-IF-FOUND(第2引数)を使用して自分で定義することが期待されます。

AC_CHECK_LIBの場合は、ACTION-IF-FOUND(3番目の引数)とAC_DEFINEを使用する必要があります。

さらに、シェル変数ac_cv_header_<HEADER>_hac_cv_lib_<LIBRARY>_<FUNCTION>が設定されます。

関連する問題