Autotools
发布日期:2021-05-07 21:03:42 浏览次数:30 分类:精选文章

本文共 2701 字,大约阅读时间需要 9 分钟。

一、autotools基础

1)configure

在linux上编译一个工程需要先调用./configure,大部分linux开源项目都使用autotools编译架构来生成configure这个脚本。通过在执行./configure,产生Makefile,src/Makefile,config.h,为下一步编译做准备。随后调用make进行编译。一般步骤如下:

./configuremakemake checkmake installmake installcheck

make install将编译的程序,库或者头文件安装到系统中。 安装的路径由prefix决定,默认prefix=/usr/local。比如你可以这样改变prefix值:

./configure --prefix=/usr make make install

2)configure变量列表

路径变量 默认值
prefix /usr/local
exec-prefix ${prefix}
bindir ${exec-prefix}/bin
libdir ${exec-prefix}/lib
includedir ${exec-prefix}/include
datarootdir ${exec-prefix}/share
datadir ${datarootdir}
mandir ${datarootdir/man
infodir ${datarootdir/info
标准配置变量 含义
CC C编译命令
CFLAGS C编译器参数
CXX C++编译命令
CXXFLAGS C++编译器参数
LDFLAGS 链接器参数
CPPFLAGS C/C++预处理器参数

3)示列

./configure --prefix=/usr CC=gcc-3 CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib

4)make的一些常用参数

指令 描述
make 根据Makefile编译源代码,连接,生成目标文件,可执行文件。
make all 等价于make,编译程序,库,文档等。
make install 安装编译好的程序和库,头文件到系统中,一般为/usr/local/bin目录。
make install-strip 和make install相同,但是剥离掉调试符号信息。
make uninstall make install的反向操作,将编译成功的可执行文件从系统目录中卸载
make clean 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。(make all的反向操作)
make distclean 类似make clean,但同时也将./configure生成的文件全部删除掉,包括Makefile
make check 运行测试项
make installcheck 检查安装程序或库,如果支持的话。
make dist 创建一个压缩包文件 PACKAGE-VERSION.tar.gz.
make distcheck 生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。

二、autotools使用

1)configure

生成configure需要我们自己编写configure.acMakefile.am文件。其中Makefile.am可能会有多个。

编写好configure.acMakefile.am文件然后使用autoreconf --install命令就可以自动生成configure脚本,和config.h.inMakefile.inaclocal.m4等文件。
configure.ac主要初始化一些信息,检查编译器,检查头文件,检查库,检查函数等。 下面是一个configure.ac样本。

AC_INIT([amhello], [1.0], [bug-automake@gnu.org])AM_INIT_AUTOMAKE([-Wall -Werror foreign])AC_PROG_CCAC_CONFIG_HEADERS([config.h])AC_CONFIG_FILES([ Makefile src/Makefile])AC_OUTPUT
  • AC_INIT初始化工程名,版本,bug报告地址一个emall
  • AM_INIT_AUTOMAKE 初始化automake
  • AC_PROG_CC检查编译器
  • AC_CONFIG_HEADERS产生config.h.in
    • AC_CONFIG_FILES 产生Makefile
    • AC_OUTPUT输出这些文件 configure,config.h.in,Makefile

2) Makefile.am

指定建造目标程序,库还是动态库等。

根目录下的Makefile.am

SUBDIRS=src
  • SUBDIRS表示建造路径为src,去到src下寻找Makefile.am文件

子目录:src/Makefile.am

bin_PROGRAMS=hellohello_SOURCES=main.c
  • bin_PROGRAMS = hello表示建造一个应用程序hello,bin表示安装路径,PROGRAMS表示建造的是一个程序。
  • hello_SOURCES=main.c表示建造hello需要的源文件。

3)autotools相关命令

工具 描述
autoreconf 以正确的顺序运行全部命令
autoconf 从configure.ac创建configure
automake 从Makefile.am和configure.ac创建Makefile.in文件
autoscan 生成一个初步的configure.in,并且创建一个configure.scan文件(configure.ac文件的模板)
aclocal 扫描configure.ac中的第三方宏,并且标示定义到aclocal.m4中
autoheader configure.ac创建config.h.in
autoupdate 跟新configure.ac中废弃的宏
ifnames 收集源代码中的#if/#ifdef/…并且标示定义
autom4te autoconf的核心,它驱动M4通过下面的工具实现功能。

4) 关系图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上一篇:编写Makefile.am
下一篇:Spring SpEL表达式语言

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月03日 07时16分48秒