文档首页
MySQL NDB 集群 API 开发人员指南
相关文档 下载此手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.1.1.4 使用 Autotools

使用 GNU autotools 通常比编写自己的 makefile 更快更简单。在本节中,我们提供一个 autoconfWITH_MYSQL,它可以用来为配置文件添加 --with-mysql 选项,并自动为给定的 MySQL 安装设置正确的编译器和链接器标志。

本章中的所有示例都包含一个通用的 mysql.m4 文件,其中定义了 WITH_MYSQL。一个典型的完整示例包括实际的源文件和以下辅助文件

  • acinclude

  • configure.in

  • Makefile.m4

automake 还要求您提供 READMENEWSAUTHORSChangeLog 文件;但是,这些文件可以留空。

要创建所有必要的构建文件,请运行以下命令

aclocal
autoconf
automake -a -c
configure --with-mysql=/mysql/prefix/path

通常,这只需要做一次,之后 make 将处理任何文件更改。

示例 1-1:acinclude.m4. 

m4_include([../mysql.m4])

示例 1-2:configure.in. 

AC_INIT(example, 1.0)
AM_INIT_AUTOMAKE(example, 1.0)
WITH_MYSQL()
AC_OUTPUT(Makefile)

示例 1-3:Makefile.am. 

bin_PROGRAMS = example
example_SOURCES = example.cc

示例 1-4:包含在 acinclude.m4 中的 WITH_MYSQL 源代码. 

dnl
dnl configure.in helper macros
dnl

AC_DEFUN([WITH_MYSQL], [
  AC_MSG_CHECKING(for mysql_config executable)

  AC_ARG_WITH(mysql, [  --with-mysql=PATH path to mysql_config binary or mysql prefix dir], [
  if test -x $withval -a -f $withval
    then
      MYSQL_CONFIG=$withval
    elif test -x $withval/bin/mysql_config -a -f $withval/bin/mysql_config
    then
     MYSQL_CONFIG=$withval/bin/mysql_config
    fi
  ], [
  if test -x /usr/local/mysql/bin/mysql_config -a -f /usr/local/mysql/bin/mysql_config
    then
      MYSQL_CONFIG=/usr/local/mysql/bin/mysql_config
    elif test -x /usr/bin/mysql_config -a -f /usr/bin/mysql_config
    then
      MYSQL_CONFIG=/usr/bin/mysql_config
    fi
  ])

  if test "x$MYSQL_CONFIG" = "x"
  then
    AC_MSG_RESULT(not found)
    exit 3
  else
    AC_PROG_CC
    AC_PROG_CXX

    # add regular MySQL C flags
    ADDFLAGS=`$MYSQL_CONFIG --cflags`

    # add NDB API specific C flags
    IBASE=`$MYSQL_CONFIG --include`
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb"
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb/ndbapi"
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb/mgmapi"

    CFLAGS="$CFLAGS $ADDFLAGS"
    CXXFLAGS="$CXXFLAGS $ADDFLAGS"

    LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient"
    LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient"

    AC_MSG_RESULT($MYSQL_CONFIG)
  fi
])