configure.ac
configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便)
最基本的组成可以是下面的
AC_INIT([PACKAGE], [VERSION], [BUG-REPORT-ADDRESS])
# Checks for programs.
# Checks for libraries.
# Checks for header les.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# Output les.
AC_CONFIG_FILES([FILES])
AC_OUTPUT
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
基本含义已经在上篇文章中介绍了,这里不再叙述。
AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS)
autoconf 强制性初始化。告诉autoconf包名称,版本,一个bug报告emall。
例如:
AC_INIT([hello], [1.0], [bug-report@address])
- 1
并且这些名称将出现在config.h,你可以在程序直接引用这些宏。
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "BUG-REPORT-ADDRESS"/* Define to the full name of this package. */
#define PACKAGE_NAME "FULL-PACKAGE-NAME"/* Define to the full name and version of this package. */
#define PACKAGE_STRING "FULL-PACKAGE-NAME VERSION"/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "full-package-name"/* Define to the version of this package. */
#define PACKAGE_VERSION "VERSION"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
AC_PREREQ(VERSION)
需要的最低autoconf版本,如:AC_PREREQ([2.65])
AC_CONFIG_SRCDIR(FILE)
一个安全的检查。FILE将是一个发布的源文件。这让configure脚本确保自己运行在正确的目录中。如:AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_AUX_DIR(DIRECTORY)
配置辅助脚本位置,如install-sh和depcomp等。如:AC_CONFIG_AUX_DIR([build-aux])
AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, …
编译器检测。
AC_PROG_SED, AC_PROG_YACC, AC_PROG_LEX, …
发现好的实现并且设置变量SED,
YACC,$LEX等。
AC_CHECK_PROGS(VAR, PROGS, [VAL-IF-NOT-FOUND])
将VAR定义为第一个发现的程序,如果没有发现就设置为VAL-IF-NOT-FOUND
AC_CHECK_PROGS([TAR], [tar gtar], [:])
if test "$TAR" = :; then
AC_MSG_ERROR([This package needs tar.])
fi
- 1
- 2
- 3
- 4
如果发现tar,gtar,就设置到变量$TAR中,如果没有发现就是设置为‘:’
AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS])
打印错误信息ERROR-DESCRIPTION并退出,EXIT-STATUS设置退出状态。
AC_MSG_WARN(ERROR-DESCRIPTION)
打印但是不退出。
AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)
输出到configu.h中。
/* DESCRIPTION */
#define VARIABLE VALUE
- 1
- 2
AC_SUBST(VARIABLE, [VALUE])
定义变量$VARIABLE=VALUE,进入Makefile。
如:AC_SUBST([FOO],[foo])
等价于
FOO=foo
AC_SUBST([FOO])
或者
AC_SUBST([FOO])
FOO=foo
AC_CHECK_LIB(LIBRARY, FUNCT, [ACT-IF-FOUND], [ACT-IF-NOT])
检查库是否存在并且包括函数FUNCT。如果发现库就执行ACT-IF-FOUND,否则执行ACT-IF-NOT。
例如:
AC_CHECK_LIB([efence], [malloc], [EFENCELIB=-lefence])
AC_SUBST([EFENCELIB])
- 1
- 2
稍后可以使用(EFENCELIB)在链接规则中。如果没有使用ACT−IF−FOUND项,并且库被发现存在。ACCHECKLIB将会做下面的操作,LIBS=”−lLIBRARY
LIBS"和#dedefine HAVE_LIB{LIBRARY}。Autmake会在链接的时候使用$LIBS。
AC_CHECK_HEADERS(HEADERS…)
检查头HEADERS并且给每一个发现的头文件定义#define HAVE_HEADER_H
例如:
AC_CHECK_HEADERS([sys/param.h unistd.h])
AC_CHECK_HEADERS([wchar.h])
- 1
- 2
检查sys/param.h unistd.h如果存在定义定义#define HAVE_SYS_PARAM_H,HAVE_UNISTD_H。
注意:一般情况下不能转换的符号都用‘_’代替。
你可以在你的头文件这么使用
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
- 1
- 2
- 3
AC_CHECK_HEADER(HEADER, [ACT-IF-FOUND], [ACT-IF-NOT])
检查一个头文件。
AC_CONFIG_HEADERS(HEADERS…)
创建头文件的HEADER.in,HEADERS包含使用AC_DEFINE的定义。
例如:
AC_CONFIG_HEADERS([config.h])
将从config.h.in创建config.h。
AC_CONFIG_FILES([Makefile sub/Makefile script.sh:script.in])
Automake创建FILE.in从每一个有FILE.am的FILE。他也可以出来非Makefile。
script.in
#!/bin/sh
SED='@SED@'
TAR='@TAR@'
d=$1; shift; mkdir "$d"
for f; do
"$SED" 's/#.*//' "$f" \
>"$d/$f"
done
"$TAR" cf "$d.tar" "$d"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
.in是文件模板。@SED@、@TAR@将被AC_SUBST([SED]),AC_SUBST([TAR])替换。这样你就可以将配置中的变量传送到其他文件中去。
Makefile.in也使用@XYZ@作为替换部分,但是Automake已经做了将所有的XYZ=@XYZ@的定义,你只需要简单使用$(XYZ)就可以了。
AM_INIT_AUTOMAKE([OPTIONS…])
检查automake尝试Makefile时的必要的工具。
例如:AM_INIT_AUTOMAKE([foreign -Wall -Werror])
一些可选的选项:
选项 | 解释 |
---|---|
-Wall | 打开全部警告 |
-Werror | 将警告当错误处理 |
-foreign | 放宽一些GNU标准需求 |
-1.11.1 | 需要automake的最低版本 |
-dist-bzip2 | 在使用make dist和make distcheck期间同时创建tar.bz2存档 |
-tar-ustar | 使用ustar格式创建tar存档 |
AC_CONFIG_FILES([Makefile sub/Makefile])
写入Makefile.am和sub/Makefile.am文件
AM CONDITIONAL(NAME, CONDITION)
定义一个条件名NAME,CONDITION将由shell解释执行,如果成功NAME将被打开。
举例:configure.ac
AC_CHECK_HEADER([bar.h], [use_bar=yes])
AM_CONDITIONAL([WANT_BAR], [test "$use_bar" = yes])
- 1
- 2
仅当当前系统中存在bar.h文件时打开WANT_BAR。
configure.ac相关推荐
- configure.ac:64: error: possibly undefined macro: AM_ICONV
configure.ac:64: error: possibly undefined macro: AM_ICONV If this token and others are legitimate, ...
- 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile
1 2 3 4 5 6 7 8 9 //根据configure.in和Makefile.am生成makefile的步骤,基于UBUNTU 12.04 1.autoscan (可选) 2.aclocal ...
- Makefile.am、Makefile.in、Makefile、configure.ac关系(十二)
1.Makefile.am: 是一些编译的选项及要进行编译的文件项. bin = test LIBRARIES = libtest.a SOURCES = test.c2.Makefile.in: 是 ...
- 编写configure.ac
configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便) 最基本的组成可以是下面 ...
- 解决 configure.ac: error: possibly undefined macro: AC_PROG_LIBTOOL
看了很多文章,这里记录一下: 1.没有安装aclocal 解决方法 #CentOS系统 yum -y install libtool libsysfs 2. aclocal与libtool没有安装在相 ...
- configure.ac(configure.in)内容详解
配置configure.ac 用自动生成Makefile的工具来生成Makefile的过程中,需要用autoscan命令来生成configure.scan文件,然后将它改名字为configure.ac ...
- 报错“configure.ac: error: possibly undefined macro“的解决方案
在ubuntu上编译libzmq时,生成configure和makefile的过程中报错: 复制代码 libzmq-master$ ./autogen.sh autoreconf: Entering ...
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系
为什么80%的码农都做不了架构师?>>> 1.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configu ...
- linux下使用automake、autoconf生成configure文件
一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...
最新文章
- 【编译原理】递归下降的预测分析(真の能看懂~!)
- 将输出流转换成输入流
- 表达式封装和模型驱动封装的区别
- markdown的11个语法
- matlab 邻近度 离群点_MATLAB自制迷宫游戏,快来试试吧!
- 难道千元机的品质真的不如旗舰机吗?
- java从入门到精通pdf第五版,满满干货指导
- 微信公众号自动回复如何添加超链接
- 中国新型显示产业竞争格局与发展规模预测报告2022版
- 2018-2019年计算机类会议截稿日期汇总(更新至20180914)
- 工业相机和普通相机的区别详解_工业相机与普通相机的差别
- qq机器人php源码_基于PHP开发的QQ多功能机器人,小明同学机器人V4.0开源
- 高盛vr/ar研究报告
- 中公计算机类考试题库,计算机考试题库:计算机考试模拟练习题(194)
- 7-5 走楼梯升级版(PTA程序设计)
- 微信订阅通知开发 (小白教程)微擎
- OPA Gatekeeper 策略入门
- 2018 php面试题
- 世界上第一台计算机应用于什么方面,世界上第一台计算机的电子元器件是什么...
- centos6.3下2T以上大硬盘如何部署和使用
热门文章
- 十年架构师留下最完整的Java学习路线
- 正则表达式--文本处理神器
- PDF文件中的图片如何删除?分享两种删除方法
- 论文笔记:Object Detection in 20 Years: A Surve(目标检测20年研究综述)
- 怀旧服一区和五区服务器位置,魔兽怀旧服战场分组怎么看?怀旧服战场分组一区五区怎么分的?...
- 酬岑勋见寻就元丹丘对酒相待,以诗见招
- 最简单的视频编码器(一)---libx264
- 用pandas绘制箱体图(boxplot)
- Windows下用Python获取电脑显示器物理尺寸和PPI
- MySQL中Invalid default value错误解决方法