我正在尝试创建一个可以通过这两个头文件与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`
这是正确的方法吗?
答案 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 。