0

我正在尝试创建一个可以通过这两个头文件与 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

我会mysql_config使用configure.acAX_WITH_PROG搜索:

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

MYSQL_CONFIG因此,如果程序安装在意外位置,您的用户将能够将环境变量指向程序。如果用户还没有安装它,他们会收到一个很好的错误消息,在尝试构建之前提醒他们这个事实。

我可能也会设置 cflags、cppflags 和 libs configure.ac,因为它们在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)

请注意,最好添加LDFLAGS而不是LDADD

于 2012-06-20T19:14:11.160 回答