22

私は最初のautoconf管理パッケージを構築しています。

ただし、必要なライブラリを指定する方法の簡単な例はどこにも見つかりません。また、さまざまな場所にある可能性のあるライブラリを見つけることもできません。

私は現在持っています:

AC_CHECK_LIB(['event'], ['event_init'])

しかし:

  1. インストールされているバージョンが見つかりません/opt/local/lib
  2. ライブラリが実際に見つからなくても文句はありません
  3. インクルードパスもに設定する必要があり/opt/local/includeます

ヘルプ、またはまともなチュートリアルへのリンクは大歓迎です...

4

7 に答える 7

14

autoconf スクリプトは、プラットフォームごとに異なる可能性がある「オプションの」ライブラリの場所を推測できません。だからあなたは言うことができます

CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" ./configure

AC_CHECK_LIB()「action-if-false」引数で失敗条件を明示的に指定する必要があるため:

dnl This is simply print "no" and continue:
AC_CHECK_LIB([m], [sqrt123])
dnl This will stop:
AC_CHECK_LIB([m], [sqrt123], [], [AC_MSG_ERROR([sqrt123 was not found in libm])])

出力:

checking for sqrt123 in -lm... no
checking for sqrt123 in -lm... no
configure: error: sqrt123 was not found in libm

AC_CHECK_LIB()明らかな理由でデフォルトで失敗することはありません: 同様の機能を提供するいくつかの異なるライブラリをチェックして、そのうちの1つを選択することができます:)

同様のトピックについては、この投稿もご覧ください。

于 2010-06-10T08:48:57.850 に答える
10

を手動で設定する必要があり、CFLAGSgcc /g++ で非標準の場所を検索する場合。CXXFLAGSLDFLAGS

したがって、 を呼び出す前にAC_CHECK_LIB()、次のようなことを行います

CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"

configure スクリプト全体で gcc のみを使用している場合は、CXXFLAGS は必要ありません。

于 2009-02-05T20:59:53.497 に答える
10

ライブラリに .pc ファイルが付属している場合は、必要なことを行う PKG_CHECK_MODULES() マクロの使用を検討してください。それが独自のライブラリである場合は、.pc ファイルを /usr/lib/pkgconfig に送信するだけで、他の開発者が依存/使用しやすくなります。

于 2009-02-05T21:28:36.683 に答える
1

これが古いスレッドであることはわかっていますが、これが一部の人々の助けになると思います。これが私がいくつかのものを見つける方法です。

hdff="no"
hdffprefix="ERROR"
AC_ARG_WITH(hdf,[  --with-hdf              Compile with hdf library, for output.],[hdffprefix=$withval hdff="yes"],[])
# if there is no value given, it appears tha hdffprefix is set to "yes"
if test $hdffprefix = "yes" -a $hdff = "yes"
then
    echo "HDF: Attempting to find HDF"
    hdffprefix="ERROR"

    # check if hdffprefix is set, if it is not, it sets it to "ERROR" and the 
    # 'if' comparison evaluates to true
    if [[ "$hdffprefix" == "ERROR" ]]
    then
        echo "HDF: hdffprefix not set, searching PATH"
        for i in `echo $PATH | tr ':' '\n'`
        do
            if [[ $i == *hdf* ]]
            then
                if [[ $i == *bin/* ]]
                then
                    hdffprefix=${i%bin/}
                    # if it doesn't exist, re-set to ERROR
                    if [[ ! -f ${hdffprefix}include/hdf.h ]]
                    then
                    hdffprefix="ERROR"
                    fi
                elif [[ $i == *bin* ]]
                then
                    hdffprefix=${i%bin}
                    # if it doesn't exist, re-set to ERROR
                    if [[ ! -f ${hdffprefix}include/hdf.h ]]
                    then
                    hdffprefix="ERROR"
                    fi
                fi
            fi
        done
        if [[ "$hdffprefix" == "ERROR" ]]
        then
            echo "HDF: hdffprefix not found in PATH, trying 'which'"
            WHICH_TEST_HDF=`which hdf2gif`
            if [[ WHICH_TEST_HDF != "" ]]
            then
                hdffprefix=${WHICH_TEST_HDF%bin/hdf2gif}
            else
                echo "HDF: Warning - hdf not found"
            fi
        fi
    fi
    if [[ "$hdffprefix" != "ERROR" ]]
    then
        hdff="yes"
        echo "HDF found: $hdffprefix"
    fi
fi
if test $hdff = 'yes'; then
        hdfincs=" -DUSE_HDF -I"${hdffprefix}"include"
        scriptotherlibsinc=${scriptotherlibsinc}" -L"${hdffprefix}"/lib"
        scriptotherlibs=${scriptotherlibs}" -lmfhdf -ldf -ljpeg -lz"
    AC_CHECK_HEADERS([${hdffprefix}/include/hdf.h],,[AC_MSG_ERROR([Cannot find hdf.h])])
    AC_CHECK_HEADERS([${hdffprefix}/include/mfhdf.h],,[AC_MSG_ERROR([Cannot find mfhdf.h])])
fi
于 2012-01-03T16:29:36.550 に答える
-1

So you want to setup autoconf to find these directories automatically and codelogic gives the answer; but suppose you don't want to search there on all system, only on a mac. You can add the following

AC_CANONICAL_HOST
case $host_os in
    darwin* )
        CFLAGS="$CFLAGS -I/opt/local/include"
        CXXFLAGS="$CXXFLAGS -I/opt/local/include"
        LDFLAGS="$LDFLAGS -L/opt/local/lib"
        ;;

esac

Note that I added it as a case tree so that you can add things for a variety of operating systems later (such as linux* and BSD).

于 2014-05-18T11:58:41.857 に答える
-1

GCCまたはを使用している場合CLANG、標準的な方法は、環境変数に非公式のインクルード ファイルとライブラリCPLUS_INCLUDE_PATHのパスを指定することです。configure.ac では何も変更する必要がないことに注意してください。したがって、次の方法で構成を呼び出すことができます。LIBRARY_PATH

$ export CPLUS_INCLUDE_PATH=/opt/local/include
$ export LIBRARY_PATH=/opt/local/lib
$ ./configure  

事実上の標準変数

Variable           | lang | Usage
-------------------|------|---------
C_INCLUDE_PATH     | C    | colon separated list of include directory paths
CPLUS_INCLUDE_PATH | C++  | colon separated list of include directory paths
LIBRARY_PATH       | C/C++| colon separated compiling time static linking dirs
LD_RUN_PATH        | C/C++| colon separated compiling time dynamic linking dirs
LD_LIBRARY_PATH    | C/C++| colon separated run-time dynamic linking dirs
CPPFLAGS           | C/C++| prepocessor flags
CFLAGS             | C    | Compiling flags
CXXFLAGS           | C++  | Compiling flags
LDFLAGS            | C++  | Linking flags

CPPFLAGSorを使用できますLDFLAGSが、CPLUS_INCLUDE_PATH/LIBRARY_PATHは要件に正確に適合します。CPPFLAGS/LDFLAGS多くのことができるフラグ用です*_PATHが、PATHs

移植性に関する注意: これは多くの最新のコンパイラで機能しますが、すべてのコンパイラがこれらの変数を尊重するわけではありません。一部のクロスコンパイラは、それらを完全に無視または上書きするため、他の回答で述べられているようにCFLAGS、変更を余儀なくされます。LDFLAGS

SOURCEここでの反対票は、私の回答に情報源がないことが原因である可能性があります. これがGCCCPLUS_INCLUDE_PATHの場合です:https://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html

于 2015-04-14T08:57:48.343 に答える