目標
在建構系統中依 --with-mysql 參數,選擇性啟用 MySQL 客戶端相關功能編譯。
核心實作步驟
1. 引入現成 M4 巨集
下載 ax_lib_mysql.m4 放入專案目錄,在 configure.ac 中:
m4_include([ax_lib_mysql.m4])
AX_LIB_MYSQL()
AM_CONDITIONAL([BUILD_MYSQL_SUPPORT], [test x$MYSQL_VERSION != x])
2. AX_LIB_MYSQL 提供的變數
| 變數 | 用途 |
MYSQL_CFLAGS | 編譯器包含路徑 |
MYSQL_LDFLAGS | 連結器庫路徑與庫名 |
MYSQL_VERSION | 偵測到的版本號 |
HAVE_MYSQL | config.h 預定義巨集 |
原始碼中使用 HAVE_MYSQL 的兩種方式
方法一:包含 config.h(推薦)
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_MYSQL
// MySQL 相關程式碼
#endif
方法二:透過編譯器旗標傳遞
if MYSQL_VERSION
MY_CFLAGS = -DHAVE_MYSQL
endif
進階 configure 參數用法
./configure --with-mysql # 自動尋找 mysql_config
./configure --with-mysql=yes # 明確啟用
./configure --with-mysql=no # 明確停用
./configure --with-mysql=/path/to/mysql_config # 指定路徑
./configure --with-mysql=5.5.18 # 要求最低版本
修改預設行為:無參數時停用 MySQL
編輯 ax_lib_mysql.m4,將預設 want_mysql="yes" 改為 "no":
- [want_mysql="yes"]
+ [want_mysql="no"]
通用 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
AM_CFLAGS = -DDEBUG
endif
- 上一篇文章: 深度剖析 Python 程式執行底層機制:自定義位元碼追蹤器實戰
- 下一篇文章: mysqladmin 監控 MySQL 運行狀態實戰:extended-status 進階用法
Copyright ©
程式碼之家 All Rights Reserved