
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.ac
和Makefile.am
文件。其中Makefile.am可能会有多个。configure.ac
和Makefile.am
文件然后使用autoreconf --install
命令就可以自动生成configure
脚本,和config.h.in
,Makefile.in
、aclocal.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) 关系图
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月03日 07时16分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
2019-03-05
二叉堆的c++模板类实现
2019-03-05
C语言实现dijkstra(adjacence matrix)
2019-03-05
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
Vue学习—深入剖析渲染函数
2019-03-05
Vue学习—深入剖析函数式组件
2019-03-05
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
2019-03-05
【Numpy学习】np.count_nonzero()用法解析
2019-03-05
Scala集合-数组、元组
2019-03-05
JAVA网络爬虫01-http client爬取网络内容
2019-03-05