autoconf 是 GNU 构建系统的一部分,用于生成配置脚本。以下是几种在 autoconf 中获取和使用变量的方法:
autoconf 提供了许多预定义变量,可以直接使用:
# 常用预定义变量
echo "安装前缀: $prefix"
echo "执行前缀: $exec_prefix"
echo "绑定目录: $bindir"
echo "库目录: $libdir"
echo "包含目录: $includedir"
在 configure.ac
中定义的变量可以通过以下方式获取:
# 在 configure.ac 中定义
MY_VAR="some_value"
AC_SUBST([MY_VAR])
# 在 Makefile.am 中使用
@MY_VAR@
AC_ARG_VAR([CUSTOM_PATH], [自定义路径变量])
这样用户可以通过 ./configure CUSTOM_PATH=/some/path
来设置变量。
# 检查环境变量
if test -z "$CUSTOM_VAR"; then
CUSTOM_VAR=default_value
fi
# 在 configure.ac 中
PKG_CHECK_MODULES([GLIB], [glib-2.0])
# 在 Makefile.am 中使用
@GLIB_CFLAGS@
@GLIB_LIBS@
AC_CHECK_HEADER([stdlib.h], [has_stdlib=yes], [has_stdlib=no])
AC_SUBST([has_stdlib])
使用 AC_DEFINE
定义的变量会出现在 config.h
中:
AC_DEFINE([USE_FEATURE_X], [1], [启用特性X])
然后在代码中:
#include <config.h>
#ifdef USE_FEATURE_X
// 使用特性X的代码
#endif
bin_PROGRAMS = myprog
myprog_SOURCES = main.c
myprog_CFLAGS = @MY_CFLAGS@
myprog_LDADD = @MY_LIBS@
# 缓存检查结果
AC_CACHE_CHECK([for something], [ac_cv_something], [
# 检查代码
])
configure.ac
中:AC_INIT([myapp], [1.0])
AC_ARG_VAR([OPT_PATH], [可选的路径设置])
AC_SUBST([OPT_PATH])
AC_CONFIG_HEADERS([config.h])
AC_DEFINE([MAX_SIZE], [1024], [最大尺寸])
AC_OUTPUT([Makefile])
Makefile.am
中:bin_PROGRAMS = myapp
myapp_SOURCES = main.c
myapp_CPPFLAGS = -DMY_OPT_PATH=\"@OPT_PATH@\"
#include "config.h"
#include <stdio.h>
int main() {
printf("MAX_SIZE is %d\n", MAX_SIZE);
printf("OPT_PATH is %s\n", MY_OPT_PATH);
return 0;
}
通过以上方法,您可以在 autoconf 构建系统中灵活地获取和使用各种变量。