GNU autotool学习备忘

autoconf和automake是啥?这 要从类Unix系统的程序编译说起。一般一个真正的工程肯定不只一个文件,而多个文件的编译是件很麻烦的事情(最简单的就是用gcc或者g 后面接着多个文件),再加上要推出跨平台的(一般只是跨不同的类Unix平台),还有啥包依赖啊什么的,很麻烦嗯。于是就有了一个工具叫 make,它接收一个名为Makefile的文件作为参数,自动地进行编译,还可以在Makefile里设置接受不同的选项,然后人们就可以 make install、make all什么的了。
然而不同系统的编译要用不同的编译参数,但是 开源软件不可能带多个Makefile,而且又难写,怎么办?于是有了configure脚本,它自动检测系统,并接受一个 Makefile.in文件,根据它来生成Makefile。
然而confiure脚本和 Makefile.in还是很难写,至少我不会写,而且看得也眼花。于是GNU推出了autoconf和automake,用于生成 configure脚本和Makefile.in文件。其中autoconf是用来生成configure的,automake是用来生成 Makefile.in的。

GNU autotools主要包括三个工具:autoconf、automake、libtool,还有很多辅助工具,包括:autoheader、 aclocal、autoscan:

  • autoscan:用于检测源代码文件并生成configure.scan
  • autoconf:根据configure.in(或者configure.ac)生成Makefile.in
  • automake:configure.in和Makefile.am生成Makefile.in

使用autotools的详细编译流程:

主要步骤:  (1):在源目录下运行autoscan生成configure.scan,重命名为configure.in  (2):编辑configure.in    

在AC_INIT后添加:AM_INIT_AUTOMAKE([program名称], [Version])

如果要编译静态库在 #Checks for libraries后添加:AC_PROG_RANLIB
如果要编译动态库在 #Checks for libraries后添加:AC_PROG_LIBTOOL

然后在AC_OUTPUT前添加(或者修改为)AC_CONFIG_FILES([Makefile])

(3):运行aclocal生成aclocal.m4
(4):运行autoconf生成configure脚本
(5):运行autoheader生成config.h.in文件
(6):创建并编辑Makefile.am:

AUTOMAKE_OPTIONS = foreign  #foreign, gnu, gnits,默认等级为gnu(会检测NEWS、README、AUTHORS和Change log文件),foreign只检测必须的文件。
bin_PROGRAMS = main(可执行文件安装到bin下,或者noinst_PROGRAMS = (不安装))
如果是lib则noinst_LIBRARIES = xxx.a
main_SOURCES = xxx.c
如果是lib则lib_xxx_a_SOURCES

如果引用其他头文件则:
INCLUDE = -I path_2_inlcude

(7):运行automake --add-missing生成makefile.in
(8):运行configure脚本生成Makefile
(9):运行make,生成可执行文件或静动态lib

编辑动态lib,如果在执行automake到configure.in中的AC_PROG_LIBTOOL时发生错误 build/ltmain.sh找不到,则可用如下命令解决:
$libtoolize --automake --copy --debug --force

其他有关Makefile.am和configure.in的内容以后在更新吧,不爱写了。

参考:  http://www.gnu.org/software/autoconf/manual/index.html  http://en.wikipedia.org/wiki/GNU_build_system  
时间: 2024-11-01 02:42:16

GNU autotool学习备忘的相关文章

Android学习备忘笺01Activity

01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main.xml 设置为MainActivity的视图,既可视化界面. 1 //IDE:Android Studio 2.3.1 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(save

asp.net mvc 学习备忘

参考书 pro asp.net mvc5 ,http://asp.net/mvc asp.net mvc是传统asp.net窗体程序的一种替代,web form 有很多被人诟病的地方.mvc不是asp.net独有的.微软模仿了Rails . m model 模型 v view 视图 c control 控制器 控制器里的每个方法称为action,每个action对应一个view, view不是一个完整的页面,而是部分页面.导航,底部等共同的部分,放在layout文件中. m 用来建立模型.呈现数

一滴一点vim(学习+备忘)

普通模式: h j k l 分别是左下上右方式移动: :w 保存修改 :q 推出 :wq 保存修改并退出 :q! 放弃修改强制推出 x 删除光标所在位置字符 i 在光标所以位置插入字符 删除类命令: dw 从光标处删除至一个单字/单词的末尾 d$ 从当前光标删除到行末 d的简短对象列表 w - 从当前光标当前位置直到单字/单词末尾,包括空格.    e - 从当前光标当前位置知道单字/单词末尾,包括*不*包括空格. $ - 从当前光标当前位置知道行末.dd 删除光标所在的整行 2dd 删除光标所

学习备忘

首要必须学Python!OpenCV是深度学习出现之前最常用的工具,基本图像处理方面. 神经网络和深度学习算法 TensorFlow(谷歌)和Keras(用起来简单上手快) https://mooc.study.163.com/smartSpec/detail/1001457001.htm CV学习线路: 原文地址:https://www.cnblogs.com/wxl845235800/p/11508661.html

Unreal Engine4 学习备忘

1.动画蓝图 包含 状态机 包含 混合空间BlendSpace,即状态机包含在动画蓝图的"动画图表中",而混合空间可用于在状态机中向某(没)一个状态输出最终POSE:    动画蓝图一共包含两个东西,除了上面提到的动画图表,还包括了一个事件图表.动画图表中,状态机内肯定有一些变量来决定状态的转换,比如"isInAir","speed"等.而这些都可以在"事件图表"中得到并设置: 动画又是怎么和我们控制的角色关联起来的呢? 第一

smarty模板学习备忘

smarty模板引擎.基于MVC开发,实现m.v的分离. assign.display.template.template_c等名词的意思. 引入smarty核心类文件.这个类作用实际就是把一些模板文件的标签翻译成php代码.然后交给web服务器. 翻译的过程,display()这个函数,利用了正则去解析模板标签. 补充一个正则替换的例子. <?php $str = "123abc888dd001cc";// 把三个数字的前边和后边加上== echo preg_replace('

c++ 学习备忘

char* 到 LPCTSTR 转换 char *m_str = "test!"; MessageBoxW(CString(m_str));

smarty模板学习备忘1

smarty模板引擎.基于MVC开发,实现m.v的分离. 一个libs的smarty库.创建模板和编译后的文件夹. assign.display.templates.templates_c等名词的意思. 引入smarty核心类文件.这个类作用实际就是把一些模板文件的标签翻译成php代码.然后交给web服务器. 分配assign,实则是向$smarty对象的一个数组属性里塞值. 翻译的过程,display()这个函数,利用了正则去解析模板标签,转化成了php代码. 补充一个正则替换的例子. <?p

vue2.0 mintUI 学习备忘

1.安装vue-cli脚手架 cnpm install -g vue-cli 2.执行vue 2.1 vue list 2.2 vue init webpack mintui(应用webpack模板 项目名称为mintui) 3.cd mintui / cnpm install / cnpm run dev 4.安装stylus 不报错方法 1.stylus-loader:"2.4.0" 2.cnpm install mintUI中文文档参考地址http://mint-ui.githu