利用Autoconf和Automake制作Makefile文件时,如何连接进MYSQL的库和头文件?

大家好,下面这个makefile文件是手工编写的,一直都用的很好,没有什么问题。
NAME = gameser
LINK = g++
CC = gcc

CCFLAGS += -g
CCFLAGS += -Wall
CCFLAGS += -I/usr/include/mysql
CCFLAGS += -DDEBUG
#CCFLAGS += -M

LINKOPTS += -L/usr/lib/mysql
LINKOPTS += -lmysqlclient
LINKOPTS += -lpthread

CPPFILES =poll.cpp /
java.cpp /
protocol.cpp /
logicgbmj.cpp /
game.cpp

$(NAME):$(CPPFILES:.cpp=.o)
$(LINK) -o $(NAME) $(CPPFILES:.cpp=.o) $(LINKOPTS)

.cpp.o:
$(CC) -c $< $(CCFLAGS)

clean:
rm -f $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(NAME)

最近想研究一下利用Autoconf和Automake自动生成makefile文件,网上关于这方面的文章都是一个简单的hello例子,不链接别人的 库,很是肤浅,而我自己的makefile文件需要MYSQL 库的支持,于是自己按照网上的步骤编写了configure.in文件和Makefile.am文件。但是make的时候说MYSQL里的一些函数未定 义。
文件autogen.sh如下:
#!/bin/sh
aclocal
autoheader
automake --add-missing
autoconf

文件configure.in如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AM_INIT_AUTOMAKE(tempexe, 1.0.0)
AC_CONFIG_SRCDIR([protocol.h])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_FILES(Makefile)
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC

AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])
AC_CHECK_HEADERS(/usr/include/mysql/mysql.h)
AC_CHECK_LIB(/usr/lib/mysql/mysqlclient)

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_STRUCT_TM

# Checks for library functions.
AC_FUNC_FORK
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([bzero dup2 inet_ntoa memmove memset socket strstr])
AC_OUTPUT (Makefile)

文件Makefile.am如下:
AUTOMAKE_OPTIONS= foreign
bin_PROGRAMS=tempexe
tempexe_SOURCES=game.cpp logicgbmj.cpp poll.cpp protocol.cpp qmysql.cpp java.cpp

执行./configure的时候下面的提示可疑,就是mysqlclient库没有找到:
checking for /usr/include/mysql/mysql.h... yes
checking for in -l/usr/lib/mysql/mysqlclient... no

./configure: line 7473: Makefile: command not found 命令没有发现,不知道这行是什么意思?
执行make的时候如下:
qmysql.h:6:19: mysql.h: 没有那个文件或目录
In file included from game.h:34,
from game.cpp:2:
qmysql.h:25: error: `MYSQL' does not name a type
qmysql.h:26: error: ISO C++ forbids declaration of `MYSQL_RES' with no type
qmysql.h:26: error: expected `;' before '*' token
make[1]: *** [game.o] 错误 1
make[1]: Leaving directory `/home/zsj/temp'

请各位大侠指点迷津,谢谢。
回复人:x86(大雪) ( 两星(中级)) 信誉:1202006-6-26 10:46:11得分:10
 
 
?

没这方面的经验,建议你下载其他用到mysql的程序(比如mysql网站上的那些工具)的源码,看看人家的文件怎么写的。

Top
 
回复人:eqxu(天使联盟) ( 三级(初级)) 信誉:1002006-6-26 11:20:29得分:80
 
 
?

INCLUDES= -I./ -I/usr/local/mysql/include/
LIBS= -L/usr/lib/mysql -lmysqlclient

在Makefile.am中加入上述就可以了,当然其他的必要的也要加入
Top
 
回复人:ghtsao(月之暗面) ( 一星(中级)) 信誉:1002006-6-26 13:23:26得分:10
 
 
?

CCFLAGS += -I/usr/include/mysql
CCFLAGS += -DDEBUG
#CCFLAGS += -M

LINKOPTS += -L/usr/lib/mysql
LINKOPTS += -lmysqlclient
LINKOPTS += -lpthread

这部分移到Makefile.am中去。
Top
 
回复人:vcclass(黑山老妖) ( 一级(初级)) 信誉:1002006-6-26 13:27:05得分:0
 
 
?

不错,大侠就是大侠,加了两行代码就OK了。谢 谢eqxu(天使联盟) 。自己摸索了两天了,没有搞定。这一问就解决了。不错。我虽然写了几个LINUX下的项目了,一直用的别人(老员工)写的makefile文件,就是上面 能用的那个,虽然能用但是修改头文件得 先make clean掉,再make,要不然不管用。我该了几次,改的不理想。考虑再三还是试试automake和autoconf,听说功能强大,一用,果然功能 强大。再此要发点牢骚,大家不要见笑:在国内的网站上找资料,大家千篇一律,你抄我的,我抄你的,也没有人给加深一下,比如制作makefile文件,大 家都是hello,都是出自同一个人之手。英文看的又很费劲。怪不得国人的软件业和老外差 得太远。估计差印度都差的很远。咱们能够获得的第一手资料实在是太少了。不知道大家有没有同感呀。不管怎么样,两个字:“结贴”。




大家好,下面这个makefile文件是手工编写的,一直都用的很好,没有什么问题。
NAME = gameser
LINK = g++
CC = gcc

CCFLAGS += -g
CCFLAGS += -Wall
CCFLAGS += -I/usr/include/mysql
CCFLAGS += -DDEBUG
#CCFLAGS += -M

LINKOPTS += -L/usr/lib/mysql
LINKOPTS += -lmysqlclient
LINKOPTS += -lpthread

CPPFILES =poll.cpp /
java.cpp /
protocol.cpp /
logicgbmj.cpp /
game.cpp

$(NAME):$(CPPFILES:.cpp=.o)
$(LINK) -o $(NAME) $(CPPFILES:.cpp=.o) $(LINKOPTS)

.cpp.o:
$(CC) -c $< $(CCFLAGS)

clean:
rm -f $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(NAME)

最近想研究一下利用Autoconf和Automake自动生成makefile文件,网上关于这方面的文章都是一个简单的hello例子,不链接别人的 库,很是肤浅,而我自己的makefile文件需要MYSQL 库的支持,于是自己按照网上的步骤编写了configure.in文件和Makefile.am文件。但是make的时候说MYSQL里的一些函数未定 义。
文件autogen.sh如下:
#!/bin/sh
aclocal
autoheader
automake --add-missing
autoconf

文件configure.in如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AM_INIT_AUTOMAKE(tempexe, 1.0.0)
AC_CONFIG_SRCDIR([protocol.h])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_FILES(Makefile)
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC

AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])
AC_CHECK_HEADERS(/usr/include/mysql/mysql.h)
AC_CHECK_LIB(/usr/lib/mysql/mysqlclient)

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_STRUCT_TM

# Checks for library functions.
AC_FUNC_FORK
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([bzero dup2 inet_ntoa memmove memset socket strstr])
AC_OUTPUT (Makefile)

文件Makefile.am如下:
AUTOMAKE_OPTIONS= foreign
bin_PROGRAMS=tempexe
tempexe_SOURCES=game.cpp logicgbmj.cpp poll.cpp protocol.cpp qmysql.cpp java.cpp

执行./configure的时候下面的提示可疑,就是mysqlclient库没有找到:
checking for /usr/include/mysql/mysql.h... yes
checking for in -l/usr/lib/mysql/mysqlclient... no

./configure: line 7473: Makefile: command not found 命令没有发现,不知道这行是什么意思?
执行make的时候如下:
qmysql.h:6:19: mysql.h: 没有那个文件或目录
In file included from game.h:34,
from game.cpp:2:
qmysql.h:25: error: `MYSQL' does not name a type
qmysql.h:26: error: ISO C++ forbids declaration of `MYSQL_RES' with no type
qmysql.h:26: error: expected `;' before '*' token
make[1]: *** [game.o] 错误 1
make[1]: Leaving directory `/home/zsj/temp'

请各位大侠指点迷津,谢谢。
回复人:x86(大雪) ( 两星(中级)) 信誉:1202006-6-26 10:46:11得分:10
 
 
?

没这方面的经验,建议你下载其他用到mysql的程序(比如mysql网站上的那些工具)的源码,看看人家的文件怎么写的。

Top
 
回复人:eqxu(天使联盟) ( 三级(初级)) 信誉:1002006-6-26 11:20:29得分:80
 
 
?

INCLUDES= -I./ -I/usr/local/mysql/include/
LIBS= -L/usr/lib/mysql -lmysqlclient

在Makefile.am中加入上述就可以了,当然其他的必要的也要加入
Top
 
回复人:ghtsao(月之暗面) ( 一星(中级)) 信誉:1002006-6-26 13:23:26得分:10
 
 
?

CCFLAGS += -I/usr/include/mysql
CCFLAGS += -DDEBUG
#CCFLAGS += -M

LINKOPTS += -L/usr/lib/mysql
LINKOPTS += -lmysqlclient
LINKOPTS += -lpthread

这部分移到Makefile.am中去。
Top
 
回复人:vcclass(黑山老妖) ( 一级(初级)) 信誉:1002006-6-26 13:27:05得分:0
 
 
?

不错,大侠就是大侠,加了两行代码就OK了。谢 谢eqxu(天使联盟) 。自己摸索了两天了,没有搞定。这一问就解决了。不错。我虽然写了几个LINUX下的项目了,一直用的别人(老员工)写的makefile文件,就是上面 能用的那个,虽然能用但是修改头文件得 先make clean掉,再make,要不然不管用。我该了几次,改的不理想。考虑再三还是试试automake和autoconf,听说功能强大,一用,果然功能 强大。再此要发点牢骚,大家不要见笑:在国内的网站上找资料,大家千篇一律,你抄我的,我抄你的,也没有人给加深一下,比如制作makefile文件,大 家都是hello,都是出自同一个人之手。英文看的又很费劲。怪不得国人的软件业和老外差 得太远。估计差印度都差的很远。咱们能够获得的第一手资料实在是太少了。不知道大家有没有同感呀。不管怎么样,两个字:“结贴”。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值