如何将mysql.h和my_global.h包含在Makefile.am中?

时间:2012-05-29 12:29:53

标签: mysql c autotools automake

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

这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

我会使用AX_WITH_PROG宏在mysql_config中搜索configure.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变量。

答案 1 :(得分: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