autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~
2011-03-21 16:10
585 查看
autoconf是一个用于 生成可以自动配置软件园代码包以适应各种类UNIX系统的shell脚本工具。由autoconf生成的配置脚本在运行时与autoconf是无关的,就是说配置脚本的用户并不需要拥有autoconf~
由autoconf生成的这些脚本通常被命名为configure,他们检查当前系统是否满足软件正常运行所需要的特征,并根据检查的到的信息生成makefile,使用者所需要的做的只有在软件发布的源程序目录中运行
./configure;剩下的工作不需要用户手工干预,because配置脚本可以自动的确定系统的类型。还可以对软件包可能需要的各种特征进行独立的测试.
autoconf需要宏处理工具GNU m4,版本必须》1.1。
1.let's build one
autoconf生成的配置脚本通常被称为configure,运行的时候,configure创建的文件有
一个或者多个makefile,并在每个子目录里面也有一个
还可能是.h文件
config.status的脚本
config.cache的脚本
config.log的文件,包含了由编译程序输出的信息,以便出错调试
使用这些的前提是编写一个configure.in的文件,并作为autoconf的输入文件运行autoconf。当然还可能要便其他的文件,如果后面用到了再说把;
除了特殊情况之外,在configure.in中可以任意次序的调用autoconf定义的测试宏,但是在被个configure.in文件中必须在开始的时候调用AC_INIT宏,并且在结尾包含一个AC_OUTPUT调用,只有这两个宏是必需的。还要注意有些宏要求其他的宏在其前面被调用,否则生成配置脚本configure时会发出警告。
通常在列表后面的测试往往依赖于前面的测试,例如,库函数可能受到typedefs和库的影响。其顺序应该是:
AC_INIT(file)
程序选择测试
检查库文件
检查头文件
检查typedefs
检查结构体
检查编译器特征
检测库函数
检测系统服务
AC_OUTPUT(file..)
比如下面的这个例子:
此外还有很多注意信息 .
2.使用autoscan build configure.in文件
在大多数情况下是不用手工输入复杂的宏定义,要不麻烦死了,这里推荐工具autoscan,这个工具是个perl的脚本程序,它从源程序中抽取与函数调用相关的头文件信息,并且将其输出到configure.scan文件中,如果在命令行中给出目录参数就能指定autoscan检查源文件的目录路径。而
configure.scan则可以作为软件包
configure.in的初始版本。
之后就可以把
configure.scan
直接改名为configure.in,但是需要做些手工检查并安排某些宏的位置。另外,如果希望软件包使用一个配置头文件,则必须调用名为AC_CONFIG_HEADER的宏,还可能用到#if等指令。
3.
使用autoscan build configure
有了configu
re.in文件后,就可以开始生成自动配置脚本configure了。要生陈configure,只需不带参数的运行autoconf命令。
下面我举个例子吧:
这是一个工程文件拉,里面的程序简单说就是animal是个父类,fish是它的子类,看过孙鑫的教程的都应该记得这个程序。首先我要先写个makefile出来;
使用命令:
gcc -MM Mainc.cpp animal.cpp fish.cpp ;得到各种关系,这个命令在上上篇文章里面有叙述~
然后我得到了各种依赖关系如图
,然后我写makefile,如图:
这里因为C++,所以我使用了g++,这个比较于gcc,更适合与C++。结果当然满足要求拉~
,然后还是对这个工程,我来生成前面讲的东西:
使用
$ autoscan;生成了configure.scan
$ cp configure.scan configure.in;生成了configure.in
$ autoconf;生成configure
然后目录为:
这时我打命令
$ ./configure;就完成了跨UNIX平台的脚本编写使用~
最后有一个错误,关于makefile.in的,下次再说
由autoconf生成的这些脚本通常被命名为configure,他们检查当前系统是否满足软件正常运行所需要的特征,并根据检查的到的信息生成makefile,使用者所需要的做的只有在软件发布的源程序目录中运行
./configure;剩下的工作不需要用户手工干预,because配置脚本可以自动的确定系统的类型。还可以对软件包可能需要的各种特征进行独立的测试.
autoconf需要宏处理工具GNU m4,版本必须》1.1。
1.let's build one
autoconf生成的配置脚本通常被称为configure,运行的时候,configure创建的文件有
一个或者多个makefile,并在每个子目录里面也有一个
还可能是.h文件
config.status的脚本
config.cache的脚本
config.log的文件,包含了由编译程序输出的信息,以便出错调试
使用这些的前提是编写一个configure.in的文件,并作为autoconf的输入文件运行autoconf。当然还可能要便其他的文件,如果后面用到了再说把;
除了特殊情况之外,在configure.in中可以任意次序的调用autoconf定义的测试宏,但是在被个configure.in文件中必须在开始的时候调用AC_INIT宏,并且在结尾包含一个AC_OUTPUT调用,只有这两个宏是必需的。还要注意有些宏要求其他的宏在其前面被调用,否则生成配置脚本configure时会发出警告。
通常在列表后面的测试往往依赖于前面的测试,例如,库函数可能受到typedefs和库的影响。其顺序应该是:
AC_INIT(file)
程序选择测试
检查库文件
检查头文件
检查typedefs
检查结构体
检查编译器特征
检测库函数
检测系统服务
AC_OUTPUT(file..)
比如下面的这个例子:
此外还有很多注意信息 .
2.使用autoscan build configure.in文件
在大多数情况下是不用手工输入复杂的宏定义,要不麻烦死了,这里推荐工具autoscan,这个工具是个perl的脚本程序,它从源程序中抽取与函数调用相关的头文件信息,并且将其输出到configure.scan文件中,如果在命令行中给出目录参数就能指定autoscan检查源文件的目录路径。而
configure.scan则可以作为软件包
configure.in的初始版本。
之后就可以把
configure.scan
直接改名为configure.in,但是需要做些手工检查并安排某些宏的位置。另外,如果希望软件包使用一个配置头文件,则必须调用名为AC_CONFIG_HEADER的宏,还可能用到#if等指令。
3.
使用autoscan build configure
有了configu
re.in文件后,就可以开始生成自动配置脚本configure了。要生陈configure,只需不带参数的运行autoconf命令。
下面我举个例子吧:
这是一个工程文件拉,里面的程序简单说就是animal是个父类,fish是它的子类,看过孙鑫的教程的都应该记得这个程序。首先我要先写个makefile出来;
使用命令:
gcc -MM Mainc.cpp animal.cpp fish.cpp ;得到各种关系,这个命令在上上篇文章里面有叙述~
然后我得到了各种依赖关系如图
,然后我写makefile,如图:
这里因为C++,所以我使用了g++,这个比较于gcc,更适合与C++。结果当然满足要求拉~
,然后还是对这个工程,我来生成前面讲的东西:
使用
$ autoscan;生成了configure.scan
$ cp configure.scan configure.in;生成了configure.in
$ autoconf;生成configure
然后目录为:
这时我打命令
$ ./configure;就完成了跨UNIX平台的脚本编写使用~
最后有一个错误,关于makefile.in的,下次再说
相关文章推荐
- 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
- 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
- 如何使用Java API在黑莓手机上记录事件信息做代码调试
- 如何使用vs调试.net framework代码 (二)(完)
- 如何使用egit将本地代码提交到托管平台
- 如何使用 Idea 远程调试 Java 代码
- 如何使用火狐Firefox的Zend Firefox Toolbar插件和Zend Studio进行代码调试
- 4000 如何使用ZeroBrane Studio 调试cocos2dx-Lua代码
- Android中如何使用代码打开各种类型的文件
- 如何使用VSCode调试Unity C#代码
- Android中如何使用代码打开各种类型的文件
- Android平台使用GDBServer 调试Native C代码
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
- 多操作系统平台协同开发时 GIT 的注意事项: 不同操作系统中的换行符(不要使用git的换行符自动转换功能,并且,尽可能保证代码的换行符都是unix); 避免使用第三方插件(如 EGit );
- 如何使用gdb调试代码(一、A Globla view of GDB )
- 如何使用Vim编写和调试Python代码
- 如何使用Fiddler调试线上代码
- 如何通过代码判断当前使用的是什么浏览器(各个平台)
- 如何使用火狐Firefox的Zend Firefox Toolbar插件和Zend Studio进行代码调试
- 说说如何使用 JavaScript 进行代码调试