0

次の 2 つのヘッダー ファイルを介して MySQL データベースと通信できる C プログラムを作成しようとしています。

mysql.h 
my_global.h

MySQL には mysql_config スクリプトが付属しており、これを実行してインクルード ファイルとライブラリ ファイルがシステム内のどこにあるかを確認できます。Makefile.am でどのように定義しますか?

私は現在、次のものを持っています:

bin_PROGRAMS = db    
db_SOURCES = db.c db.h                                            
db_CFLAGS = -Wall `mysql_config --cflags --libs`  

これは正しい方法ですか?

4

2 に答える 2

1

AX_WITH_PROGマクロmysql_configconfigure.ac使用して検索します。

AX_WITH_PROG([MYSQL_CONFIG], [mysql_config], [AC_MSG_ERROR(mysql_config is required to build)])

MYSQL_CONFIGそのため、プログラムが予期しない場所にインストールされた場合でも、ユーザーは環境変数をプログラムに向けることができます。また、ユーザーがインストールしていない場合は、ビルドを試みるにその事実を警告する素晴らしいエラーメッセージが表示されます。

実行configure.ac後に変更されるべきではないので、おそらくcflags、cppflags、およびlibsも設定します。configure

MYSQL_CONFIG_CFLAGS=`$MYSQL_CONFIG --cflags`
MYSQL_CONFIG_CPPFLAGS=`$MYSQL_CONFIG --include`
MYSQL_CONFIG_LIBS=`$MYSQL_CONFIG --libs`
AC_SUBST([MYSQL_CONFIG_CFLAGS])
AC_SUBST([MYSQL_CONFIG_CPPFLAGS])
AC_SUBST([MYSQL_CONFIG_LIBS])

そしてそれらを所定の位置に置きますMakefile.am

db_CFLAGS = -Wall $(MYSQL_CONFIG_CFLAGS)
db_CPPFLAGS=$(MYSQL_CONFIG_CPPFLAGS)
db_LDADD=$(MYSQL_CONFIG_LIBS)

必要なのがヘッダーファイルだけの場合は、おそらくcflags変数を設定する必要はありません。

于 2012-05-29T21:34:12.930 に答える
0

私は似たようなことをしました:configure.acで:

AC_DEFUN([CHECK_MYSQL_LIB],
[
AC_CHECK_PROGS(
    MYSQL_CONFIG,
    mysql_config
)

  #In case it fails to find pthread then exit configure 
  if test "x${MYSQL_CONFIG}" != xmysql_config; then
    echo "------------------------------------------"
    echo " The mysql library and header file is      "
    echo " required to build this project. Stopping "
    echo " Check 'config.log' for more information. "
    echo "------------------------------------------"
    (exit 1); exit 1;
  else
    MYSQL_CONFIG_CFLAGS=`$MYSQL_CONFIG --cflags`
    MYSQL_CONFIG_CPPFLAGS=`$MYSQL_CONFIG --include`
    MYSQL_CONFIG_LIBS=`$MYSQL_CONFIG --libs`
    AC_SUBST([MYSQL_CONFIG_CFLAGS])
    AC_SUBST([MYSQL_CONFIG_CPPFLAGS])
    AC_SUBST([MYSQL_CONFIG_LIBS])
  fi
])

そして Makefile.am で:

db_CPPFLAGS=$(MYSQL_CONFIG_CPPFLAGS)
db_LDFLAGS=$(MYSQL_CONFIG_LIBS)

LDADDの代わりにLDFLAGSを追加する方がよいことに注意してください。

于 2012-06-20T19:14:11.160 に答える