利用Autoconf和Automake製作Makefile檔案時,如何串連進MYSQL的庫和標頭檔?

來源:互聯網
上載者:User
大家好,下面這個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(大雪) ( ) 信譽:120 2006-6-26 10:46:11 得分:10
 
 
?
沒這方面的經驗,建議你下載其他用到mysql的程式(比如mysql網站上的那些工具)的源碼,看看人家的檔案怎麼寫的。

Top
 
回複人:eqxu(天使聯盟) ( ) 信譽:100 2006-6-26 11:20:29 得分:80
 
 
?
INCLUDES= -I./ -I/usr/local/mysql/include/
LIBS= -L/usr/lib/mysql -lmysqlclient

在Makefile.am中加入上述就可以了,當然其他的必要的也要加入

Top
 
回複人:ghtsao(月之暗面) ( ) 信譽:100 2006-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(蒙特內格羅老妖) ( ) 信譽:100 2006-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(大雪) ( ) 信譽:120 2006-6-26 10:46:11 得分:10
 
 
?
沒這方面的經驗,建議你下載其他用到mysql的程式(比如mysql網站上的那些工具)的源碼,看看人家的檔案怎麼寫的。

Top
 
回複人:eqxu(天使聯盟) ( ) 信譽:100 2006-6-26 11:20:29 得分:80
 
 
?
INCLUDES= -I./ -I/usr/local/mysql/include/
LIBS= -L/usr/lib/mysql -lmysqlclient

在Makefile.am中加入上述就可以了,當然其他的必要的也要加入

Top
 
回複人:ghtsao(月之暗面) ( ) 信譽:100 2006-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(蒙特內格羅老妖) ( ) 信譽:100 2006-6-26 13:27:05 得分:0
 
 
?
不錯,大俠就是大俠,加了兩行代碼就OK了。謝 謝eqxu(天使聯盟) 。自己摸索了兩天了,沒有搞定。這一問就解決了。不錯。我雖然寫了幾個LINUX下的項目了,一直用的別人(老員工)寫的makefile檔案,就是上面 能用的那個,雖然能用但是修改標頭檔得 先make clean掉,再make,要不然不管用。我該了幾次,改的不理想。考慮再三還是試試automake和autoconf,聽說功能強大,一用,果然功能 強大。再此要發點牢騷,大家不要見笑:在國內的網站上找資料,大家千篇一律,你抄我的,我抄你的,也沒有人給加深一下,比如製作makefile檔案,大 家都是hello,都是出自同一個人之手。英文看的又很費勁。怪不得國人的軟體業和老外差 得太遠。估計差印度都差的很遠。咱們能夠獲得的第一手資料實在是太少了。不知道大家有沒有同感呀。不管怎麼樣,兩個字:“結貼”。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.