1

configure.acソースルートにあるヘッダーファイルをチェックしています

AC_CHECK_HEADER(log4c.h,
    [],
    [AC_MSG_ERROR([Couldn't find or include log4c.h])])

そして、ヘッダーを提供するさまざまな最も簡単な方法を反映するために、さまざまなプラットフォームでさまざまなフィードバックを提供したいと思います。

  • Debian では、メッセージでエラーになるはずですCouldn't find or include log4c.h. Install log4c using 'sudo apt-get install liblog4c-dev'
  • OpenSUSE では、エラーが発生するはず... Install log4c using 'sudo yum install log4c-devel'です (パッケージ名は調査しませんでしたが、私のドリフトをキャッチしました)。
  • 他のシステム(パッケージ名を調べるのが面倒なところ)では、次のエラーが発生するはずです... Install log4c by fetching ftp://.../log4c.tar.gz and installing with './configure && make && make install' in the source root

  • マクロをチェックしましたが、 inではなくin でAM_CONDITIONAL使用する方法がわかりません( autoconf/automake: conditional compilation based on presents of library? で説明されているように)configure.acMakefile.am
  • esyscmdstackoverflow.com/questions/4627900/m4-executing-a-shell-command で実行するためのヒントを見つけましたが、実行しても何も出力esyscmd (/bin/echo abc)されません。configure.acautoreconf --install --verbose --force

上記のOSのシェルコマンドを使用しない条件付きマクロの使用法と、事前定義されたマクロ( 、など)へのリンクを説明する両方の回答AC_CHECK_HEADER_DEBIANAC_CHECK_HEADER_SUSE高く評価されます。

以下configure.acは機能しません。

AC_INIT([cndrvcups-common], [2.90], [krichter722@aol.de])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects]) 
AC_PROG_CC
AM_PROG_AR
AM_PROG_CC_C_O

AC_MSG_NOTICE([Hello, world.])
AC_INCLUDES_DEFAULT
AC_CHECK_HEADER(check.h,
    [],
    [
        AS_IF (test "$(lsb_release -cs)" = "vivid", [echo aaaaaa], [echo bbbbbb])
    ])

LT_INIT # needs to be after AM_PROGS_AR
AC_CONFIG_HEADERS([config.h])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

./configureで失敗するため

checking check.h usability... no
checking check.h presence... no
checking for check.h... no
./configure: line 4433: syntax error near unexpected token `;'
./configure: line 4433: `        if ; then :'

./configure: line 4427: #include: command not foundが指定されているかどうかに関係なく発生するものもありAC_CHECK_HEADERます。

4

2 に答える 2

2

あなたconfigure.acはほとんど大丈夫です。AS_IF唯一の問題は、と括弧の間のスペースです。m4スクリプトでは、マクロ名と開き括弧の間に空白は使用できません。これは正しい構文です:

AC_CHECK_HEADER(check.h,
    [],
    [
        AS_IF(test "$(lsb_release -cs)" = "vivid", [echo aaaaaa], [echo bbbbbb])
    ])

異なるディストリビューションを検出する方法を探している場合は、configure.acの例を参照してくださいcgmanager

アップデート

あなたの にもう 1 つ問題があることに気付きましたconfigure.ac

AC_INCLUDES_DEFAULTマクロは、既定のインクルード セットに展開されるため、ここでは使用できません。それも必要ありません。最後のパラメーターを省略すると、 AC_CHECK_HEADERマクロでデフォルトで使用されます。

これがline 4427: #include: command not foundあなたが言及したエラーの原因です。

コメントを更新する

まず、システム コマンド自体を実行するなど、lsb_release移植性はありません。まず、たとえば でAC_CHECK_PROGその存在を確認する必要があります。

構文に関しては、最初に backticks:result=`lsb_release -cs`を使用してコマンドの出力を取得し、後で結果の出力をテストします: test "x$result" = "xvivid"x一部のシェルで空の値の問題を回避するために必要です。

最後に、configure スクリプトがこのすべてのディストリビューション固有のメッセージの適切な場所であるかどうか疑問に思います。README ファイルに配置することを検討してください。

于 2015-05-06T17:02:38.833 に答える