如何使用autoconf生成生成 tsconfig.jsonh

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 16, 距离下一级还需 184 积分
论坛徽章:0
按书本附录说的,用autoconf 的configure 生成,没有啊。。请各位帮忙。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 2812, 距离下一级还需 2188 积分
论坛徽章:5
你执行configure脚本的时候就生成了。
丰衣足食, 积分 909, 距离下一级还需 91 积分
论坛徽章:0
是在autoheader阶段生成的,autoheader是automake中的一个命令
白手起家, 积分 16, 距离下一级还需 184 积分
论坛徽章:0
请问生成在什么位置的呢?没看到啊。
小富即安, 积分 2812, 距离下一级还需 2188 积分
论坛徽章:5
我一般是 autoreconf --install
./configure
白手起家, 积分 16, 距离下一级还需 184 积分
论坛徽章:0
额 。。谢谢了。。我还是找不到。
继续求大侠帮忙。。。
白手起家, 积分 4, 距离下一级还需 196 积分
论坛徽章:0
cd unpv13e
./configure
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处源:http://blog.csdn.net/yah99_wolf/article/details/6172614
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install,&使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。
这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是&hello world&的样例,离真正完成大型项目的目标还差得远。
没有办法,对照网上的样例,再找几个开源的源码,然后参考各种Autotools的手册,花了2天时间,终于完成了一个基本可用的Autotools。为了避免其他XDJM也浪费时间,因此将过程总结下来,就算是新年礼物,送给大家!!
提纲挈领:使用Autotools其实很简单
大家不要看到那么多工具,其实使用起来很简单,总结起来就是两部分:
1)&按照顺序调用各个工具;
2)修改或者添加3个文件;
听到我这么讲,大家是否觉得有信心了?好的,下面我们来看具体如何操作:
1.&&&&&&&&&源码根目录调用autoscan脚本,生成configure.scan文件,然后将此文件重命名为configure.ac(或configure.in,早期使用.in后缀)
2.&&&&&&&&&【修改】configure.ac,利用autoconf提供的各种M4宏,配置项目需要的各种自动化探测项目
3.&&&&&&&&&调用aclocal收集configure.ac中用到的各种非Autoconf的宏,包括【自定义宏】
4.&&&&&&&&&调用autoheader,扫描configure.ac(configure.in)、acconfig.h(如果存在),生成config.h.in宏定义文件,里面主要是根据configure.ac中某些特定宏(如AC_DEFINE)生成的#define和#undefine宏,configure在将根据实际的探测结果决定这些宏是否定义(具体见后面例子)。
5.&&&&&&&&&按照automake规定的规则和项目的目录结构,【编写】一个或多个Makefile.am(Makefile.am数目和存放位置和源码目录结构相关),Makefile.am主要写的就是编译的目标及其源码组成。
6.&&&&&&&&&调用automake,将每个Makefile.am转化成Makefile.in,同时生成满足GNU编码规范的一系列文件(带-a选项自动添加缺少的文件,但有几个仍需要自己添加,在执行automake前需执行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定义了AC_PROG_LIBTOOL宏(老版本)或LT_INIT宏),需要在此步骤前先在项目根目录执行libtoolize --automake --copy --force,以生成ltmain.sh,供automake和config.status调用。
7.&&&&&&&&&调用autoconf,利用M4解析configure.ac,生成shell脚本configure。以上几步完成后,开发者的工作就算完成了,后面的定制就由开源软件的用户根据需要给configure输入不同的参数来完成。
8.&&&&&&&&开源用户调用configure,生成Makefile,然后make && make install。
整个过程步骤有8步,但其中有5步你只需要简单的敲一个命令即可,只有剩下的三步需要你动手写一些东西,对应上面步骤中的蓝色黑体字部分,下一篇博文将重点讲述如何在大型项目中完成这三歩。
阅读(...) 评论() &大型项目使用Gnu AutoMake/Autoconf完成编译配置(6)— Hello World 配置文件详解 | 勇敢的程序猿
前言  现在我们从configure.ac、Makefile.am、src/Makefile.am来具体说说每个里面的意思及它们在构建中的作用。
amhello’s 中configure.ac配置解释我们回顾下configure.ac的内容:123456789AC_INIT([amhello], [1.0], [bug-automake@gnu.org])AM_INIT_AUTOMAKE([-Wall -Werror foreign])AC_PROG_CCAC_CONFIG_HEADERS([config.h])AC_CONFIG_FILES([Makefilesrc/Makefile])AC_OUTPUT
这个文件需要被autoconf(创建configure)和 automake(创建不同的Makefile.am s)。它包含了一些列的M4宏,这些会被扩展为shell代码然后最终组织到configure脚本中,关于这个文件具体语法Autoconf手册都有。我们可以看到这个文件中的宏的前缀都为 AC_,这些都是Autoconf宏,关于每个宏的作用可以查询Autoconf手册。
AC_INIT前两行
AC_INIT([amhello], [1.0], [bug-automake@gnu.org])AM_INIT_AUTOMAKE([-Wall -Werror foreign])
作为Autoconf 和 Automake 的初始化。AC_INIT 需要的参数分别为,AC_INIT([包名],[版本号],[报告bug的邮箱]),这个邮箱地址我们可以在执行./configure --help命令查看到。版本号和包名在打包的时候会用到,通过执行 make dist可以把源码中主要的文件打包成 包名-版本号.tar.gz 。
AC_INIT_AUTOMAKEAM_INIT_AUTOMAKW 参数是一组关于automake执行的选项。 -Wall 和 -Werror 让 automake 打开所有的警告和报告错误。这里说道的警告比如说在Makefile.am中的可疑指令,这些指令和将怎么调用编译器没任何关系,即使是可以通过类似命名的支持的选项。对于我们新手来说,通过使用 -Wall -Werror 是对待包构建的一个非常安全的设置,我们并不想错过任何的问题。熟练之后,我们可以适当放宽,知道哪些是可以留下的。foreign选项通知Automake程序这个包的构建不遵循Gnu 标准。因为在Gnu 标准中必须有这几个文件比如说:Changelog,AUTHORS等等,和我们平常使用的github项目类似,一般要求有一个README.md的文件来描述项目。我们不希望 automake 报告缺失这些文件。
AC_PROG_CCAC_PORG_CC这行最终的作用是让configure脚本来在系统中搜索 c 编译器,并且把C编译器定义为变量CC ,然后src/Makefile.in文件就可以通过Automake使用CCa 来生成执行程序hello,所以当 configure 通过 src/Makefile.in 创建了 src/Makefile 文件的时候,它就会把找到的C编译器定义为CC , 如果要求Automake通过CC创建Makefile.in,而 configure.ac中并没有定义CC ,它就会提示我们增加一条 AC_PROC_CC.
AC_CONGIF_HEADER([config.h]),这个宏主要是用来创建config.h,它会把configure.ac中的被其它宏定义的宏以#define的形式集中到config.h中。在我们这个例子中,AC_INIT宏已经定义了一些宏了。这里是执行./configure后的config.h的内容:1234567891011121314151617181920212223242526#define PACKAGE "amhello"#define PACKAGE_BUGREPORT "bug-automake@gnu.org"#define PACKAGE_NAME "amhello"#define PACKAGE_STRING "amhello 1"#define PACKAGE_TARNAME "amhello"#define PACKAGE_URL ""#define PACKAGE_VERSION "1"#define VERSION "1"
我们会发现,src/main.c中头文件中包含了config.h,所以这个时候main.c就可以直接使用PACKAGE_STRING。在实际项目中,config.h会非常大,几乎系统每个特性都会有一个#define定义。
AC_CONFIG_FILESAC_CONFIG_FILES宏声明了configure 通过Makefile.ins 需要生成的一系Makefile文件。Automake 同样要扫描这个列表来查找需要处理的Makefile.am。(特别强调:一旦我们在工程中增加了新的目录,我们应该把该目录下的Makefile增加到这个列表中,否则的话,即使我们在这个目录下谢了Makefile.am,Automake也 不会处理)。
AC_OUTPUTAC_OUTPUT 是一个结束命令,实际上是AC_CONFIG_HEADERS和AC_CONFIG_FILES命令完成的结束,并将这俩处理后产生的文件输出。 对于一个新的工程的话,我们最好是以这样一个简单的的configure.ac文件开始,然后逐渐增加测试需求。autoscan命令同样可以帮助我们增加一些需要的测试需求。手动的话也可以先执行autoscan,然后再修改,注意文件中不同测试宏的顺序。
amhello 中 Makefile.am 配置解释我们现在看下src/Makefile.am12bin_PROGRAMS = hellohello_SOURCES = main.c
Makefile.am的语法和Makefile文件的语法是一样的。automake处理Makefile.am的时候它就把Makefile.am完全拷贝到Makefile.in中(Makefile.in文件会在之后被configure处理为Makefile),但是会根据一些构建规则和变量改变一些变量的定义。通常Makefile.ams 只包含一组上述例子中的变量定义,但是他们同样可以包含一些变量和规则定义,这些会通过automake不加解释地传递进来。
bin_PROGRAMS以_PROGRAMS为后缀的在变量列表中属于特殊的变量,它们是Makefile 最终需要生成的。我们示例中最后的科执行文件就是hello。从Automake角度看,将bin_PROGRAMS分为两部分,_PROGRAMS后缀结束的变量为主要变量,Automake识别其他的主要变量比如说 _SCRIPTS,_DATA,_LIBRARIES等等,分别对应不同的文件。而bin_PROGRAMS中的bin部分使用来告诉automake最终编译生成的程序应该安装到 bindir .在GNU Build System中使用了一系列变量来提供目标目录的位置,并且允许用户自定义这些路径的位置。任何这样的变量都可以用这种形式来指定不同的文件放到哪些位置。比如:
用于安装由用户运行的可执行文件的目录。datadir 用于安装只读的与结构无关的数据的目录。includedir
用于安装C头文件的目录。
可以参见GNU编码标准中这些变量的定义。而且,Automake同样知道在创建打包文件时需要将不同类型的文件以分布式的形式放开,而hello_SOURCES的副作用就是在执行make dist是main.c成为tarball的一部分。
现在我们再看下工程目录下的Makefile.am。12SUBDIRS = srcdist_doc_DATA = README
SUBDIRSSUBDIR 是一个特殊的变量,列出了make在处理当前目录之前递归处理的目录。所以在这个例子中,先用make处理src/,然后再处理amhello下的文件。同样在make install 的时候先安装src/README,然后再安装 src/hello。
dist_doc_DATAdist_doc_DATA = README,因为README将要被安装到docdir中,由于_DATA后的文件在dist打包的时候不会被创建进去,所以我们在_DATA前加了一个dist 前缀,这个README并不是必须的。比较重要的影响是在make install 的时候把README安装进去。
写的好多了,只是最基本的一些值,但是也希望能给大家带来帮助。关于Autoconf中涉及比较重要的各个宏的作用我们下一篇再具体学习下。1288人阅读
linux(7)
作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了. 在本文中,将介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。
一、Makefile介绍
  Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
  Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
  Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合惯例,而且自己写的Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。
  使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的Makefile。下面我们将详细介绍Makefile的automake生成方法。
  在你的工作目录下建一个helloworld目录,我们用它来存放helloworld程序及相关文件:
&&&&& $ mkdir helloword
&&&&& $ cd helloworld
& & & $ touch hello.c
2、编写hello.c
int main(int argc, char** argv)
& & & & printf(&Hello, Linux World! &);
& & & & return 0;
完成后保存退出。现在在helloworld目录下就应该有一个你自己写的hello.c了。
3.使用autoscan工具生成configure.scan文件
该文件的简要说明如下:
1、&&AC_PREREQQ宏声明本文件要求的autoconf版本,这里是2.68
2、&&AC_INIT定义软件的名称和信息。(DULL-PACKAGE-NAME为软件名,VERSION为软件的版本号,BUG-REPORT-ADDRESS为bug的报告地址,一般为软件作者的邮箱)
3、&&AC_CONFIG_SRCDIR用来侦测指定的源码文件是否存在,确定源码目录的有效性。此处为当前目录下hello.c
4、&&AC_CONFIG_HEADER用于生成config.h文件,以便autoheader使用
5、&&AC_PROG_CC用来指定编译器,以便不指定的时候默认为gcc
6、&&AC_OUTPUT用来设定config要产生的文件。如果是Makefile,config会把它检查出来的结果带入Makefile.in文件产生合适的Makefile.
4.获得并且修改configure.ac(或configure.in)
$cp configure.scan configure.ac
并做一下修改
这里注意重要的一点:AM_INIT_AUTOMAKE宏需要自己进行添加,它是automake所必备的宏。
5.使用aclocal工具生成aclocal.m4
6.使用autoconf工具生成configure文件
7.使用autoheader工具生成config.h.in文件
8.创建Makefile.am文件
Automake工具会根据config.in中的参量把Makefile.am转换成Makefile.in文件。在使用Automake之前,要先手动建立Makefile.am文件。
几点需要说明:
1、AUTOMAKE_OPTIONS为设置的Automake选项。它有三种等级提供给用户选择:foreign,gnu,gnits,默认等级为gnu.在此使用foreign,它只检测必须的文件。
2、bin_PROGRAMS定义要产生的执行文件名。如果要产生多个可执行文件,则每个文件名用空格隔开。
3、hello_SOURCES定义为hello这个程序所需要的原始文件。如果其石油多个文件组成的,则必须用空格进行隔开。
9.使用Automake生成Makefile.in文件
要使用选项“--add-missing”可以让Automake自动添加一些必要的脚本文件。如下
运行自动配置设置文件configure,把Makefile.in编程最终的Makefile
运行Make命令进行编译。然后运行hello程序
四、深入浅出
  针对上面提到的各个命令,我们再做些详细的介绍。
  1、 autoscan
  autoscan是用来扫描源代码目录生成configure.scan文件的。autoscan可以用目录名做为参数,但如果你不使用参数的话,那么autoscan将认为使用的是当前目录。autoscan将扫描你所指定目录中的源文件,并创建configure.scan文件。
  2、 configure.scan
  configure.scan包含了系统配置的基本选项,里面都是一些宏定义。我们需要将它改名为configure.in
  3、 aclocal
  aclocal是一个perl 脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。
  4、 autoconf
  autoconf是用来产生configure文件的。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。
  configure.in文件的内容是一些宏,这些宏经过autoconf 处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。
  在configure.ini中:
  #号表示注释,这个宏后面的内容将被忽略。
  AC_INIT(FILE)
  这个宏用来检查源代码所在的路径。
AM_INIT_AUTOMAKE(PACKAGE, VERSION)
   这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本号:PACKAGE是软件包的名字,VERSION是版本号。当你使用make dist命令时,它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对应的软件包的名字和版本号。
AC_PROG_CC
  这个宏将检查系统所用的C编译器。
AC_OUTPUT(FILE)
  这个宏是我们要输出的Makefile的名字。
  我们在使用automake时,实际上还需要用到其他的一些宏,但我们可以用aclocal 来帮我们自动产生。执行aclocal后我们会得到aclocal.m4文件。&
  产生了configure.in和aclocal.m4 两个宏文件后,我们就可以使用autoconf来产生configure文件了。
  5、 Makefile.am
  Makefile.am是用来生成Makefile.in的,需要你手工书写。Makefile.am中定义了一些内容:
AUTOMAKE_OPTIONS
  这个是automake的选项。在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。我们将其设置成foreign时,automake会改用一般软件包的标准来检查。
bin_PROGRAMS
  这个是指定我们所要产生的可执行文件的文件名。如果你要产生多个可执行文件,那么在各个名字间用空格隔开。
helloworld_SOURCES
  这个是指定产生“helloworld”时所需要的源代码。如果它用到了多个源文件,那么请使用空格符号将它们隔开。比如需要helloworld.h,helloworld.c那么请写成helloworld_SOURCES= helloworld.h helloworld.c。
  如果你在bin_PROGRAMS定义了多个可执行文件,则对应每个可执行文件都要定义相对的filename_SOURCES。
  6、 automake
  我们使用automake --add-missing来产生Makefile.in。
  选项--add-missing的定义是“add missing standard files to package”,它会让automake加入一个标准的软件包所必须的一些文件。
  我们用automake产生出来的Makefile.in文件是符合GNU Makefile惯例的,接下来我们只要执行configure这个shell 脚本就可以产生合适的 Makefile 文件了。
  7、 Makefile
  在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作:
  根据Makefile编译源代码,连接,生成目标文件,可执行文件。
make clean
  清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。
make install
  将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。
  产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。
  它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。
make distcheck
  生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。
===============================================
helloworld-1.0.tar.gz is ready for distribution
===============================================
make distclean
  类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。
四、过程图示
五、结束语
  通过上面的介绍,你应该可以很容易地生成一个你自己的符合GNU惯例的Makefile文件及对应的项目文件。
  如果你想写出更复杂的且符合惯例的Makefile,你可以参考一些开放代码的项目中的configure.in和Makefile.am文件,比如:嵌入式数据库sqlite,单元测试cppunit。
其他相关资料链接:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:65379次
积分:1076
积分:1076
排名:千里之外
原创:29篇
转载:27篇
(1)(5)(16)(3)(4)(13)(11)(1)(3)(4)(1)(3)
http://timyang.net/distributed/paxos-scenarios/
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 mobileconfig 生成 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信