在專案 configure.ac 中檢測系統是否安裝 MySQL 客戶端開發庫(mysql_config),並根據 --with-mysql 參數決定是否編譯 MySQL 相關功能。
ax_lib_mysql.m4從 Autoconf Archive 下載,放入專案根目錄或 m4/ 目錄。
configure.ac 接入m4_include(ax_lib_mysql.m4) # 或放在 m4/ 目錄下用 AC_CONFIG_MACRO_DIR([m4]) AX_LIB_MYSQL() # 檢測 mysql_config、設置變量 AM_CONDITIONAL(BUILD_MYSQL_SUPPORT, test x$MYSQL_VERSION != x)
AX_LIB_MYSQL 導出的關鍵變量| 變量 | 用途 | 可用位置 |
|---|---|---|
MYSQL_CFLAGS | 編譯器包含路徑(-I...) | Makefile.am |
MYSQL_LDFLAGS | 鏈接器庫路徑(-L... -lmysqlclient) | Makefile.am |
MYSQL_VERSION | 檢測到的版本字符串(如 5.5.18) | Makefile.am / configure.ac |
HAVE_MYSQL | C 預處理器宏(#define HAVE_MYSQL 1) | config.h / 源碼 |
Makefile.am 使用示例if BUILD_MYSQL_SUPPORT myapp_CPPFLAGS = $(MYSQL_CFLAGS) -DHAVE_MYSQL myapp_LDADD = $(MYSQL_LDFLAGS) endif
/* 方式一:包含 config.h(推薦) */ #ifdef HAVE_CONFIG_H #include#endif #ifdef HAVE_MYSQL /* MySQL 相關代碼 */ #endif /* 方式二:編譯器直接傳 -DHAVE_MYSQL(見上 Makefile.am) */
AX_LIB_MYSQL(5.5.18) # 版本不滿足則 MYSQL_VERSION 為空,BUILD_MYSQL_SUPPORT=false
--with-mysql 默認行為(預設啟用 → 預設禁用)編輯 ax_lib_mysql.m4,將 want_mysql="yes" 改為 want_mysql="no":
@@ -61,7 +61,7 @@
MYSQL_CONFIG="$withval"
fi
],
- [want_mysql="yes"]
+ [want_mysql="no"]
)
AC_ARG_VAR([MYSQL_CONFIG], [Full path to mysql_config program])
此後:
./configure → 不檢測 MySQL,BUILD_MYSQL_SUPPORT=false./configure --with-mysql → 啟用檢測./configure --with-mysql=/path/to/mysql_config → 指定非標準路徑--enable-debug 開關AC_ARG_ENABLE(debug,
AS_HELP_STRING([--enable-debug], [enable debugging, default: no]),
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],
[debug=false])
AM_CONDITIONAL(DEBUG, test x"$debug" = x"true")
Makefile.am:
if DEBUG myapp_CPPFLAGS += -DDEBUG endif
ax_lib_mysql.m4 封裝了 mysql_config --cflags/--libs/--version 的調用與版本比較邏輯,**一鍵解決跨平台 MySQL 庫檢測**;配合 AM_CONDITIONAL 實現優雅的條件編譯,是 Autoconf 專案集成 MySQL 的標準做法。