2012-05-29 54 views
0

我試圖創建一個C程序,可以通過這兩個頭文件與MySQL數據庫進行通信:如何將mysql.h和my_global.h包含到Makefile.am中?

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` 

這是正確的方法是什麼?

回答

1

我會使用AX_WITH_PROG宏搜索mysql_configconfigure.ac

AX_WITH_PROG([MYSQL_CONFIG], [mysql_config], [AC_MSG_ERROR(mysql_config is required to build)]) 

所以你的用戶將能夠在程序點MYSQL_CONFIG環境變量,它應該被安裝在一個意想不到的位置。如果用戶還沒有安裝它,他們會得到一個很好的錯誤信息,在嘗試構建之前提醒他們

我可能會成立CFLAGS,CPPFLAGS,並在configure.ac庫爲好,因爲他們不應該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變量。

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

相關問題