企业如何利用HarmonyOS开发工具提升小程序开发效率与合规性
1524
2022-09-22
如何用autoscan和automake由makefile.am自动生成makefile
对于一个UNIX/Linux下C程序员来说,一个比较麻烦的工作就是写自己的Makefile。可能你有如下经验:写一个简单的C程序,自己多写几行gcc命令就把程序变成可执行的了;写一个稍微复杂点的程序,源文件个数可能在30个左右,还是写一行行的gcc命令就麻烦了,你可能想到写个makefile,你可能也在这样做着;但你某一天会发现你写的这个Makefile可能不是一个所有 UNIX/Linux类操作系统下通用的Makefile,比如某人-了你的程序去他自己电脑上可能make不了。
这样,你就有必要了解并学会运用autoconf和automake了。
先简单介绍一下这两个工具:autoconf:是一个用于生成可以自动地配置软件源代码包以适应多种UNIX类系统的shell脚本的工具。由autoconf生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要手工给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。因此,它们在混合系统或者从各种常见UNIX变种定制而成的系统中工作的很好。你也省了工作,没必要维护文件以储存由各个UNIX变种、各个发行版本所支持的特征的列表。automake:是一个从文件Makefile.am自动生成Makefile.in的工具。每个Makefile.am基本上是一系列make的宏定义(make规则也会偶尔出现)生成的Makefile.in,服从GNU Makefile标准。为了生成Makefile.in,automake需要perl。但是由automake创建的发布完全服从GNU标准,并且在创建中不需要perl。
不罗嗦了,进入正题~
在本文中,我将结合最近的实践经历以及遇到的问题,给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。* 在开始使用autoconf和automake之前,首先确认你的系统安装有GNU的如下软件:1. automake 2. autoconf 3. m4 4. perl 5. 如果你需要产生共享库(shared library)则还需要GNU Libtool。* 介绍方法之前,大家先记下autoconf和automake工作的几个步骤,步骤解释如下:1、由你的源文件通过autoscanf命令生成configure.scan文件,然后修改configure.scan文件并重命名为configure.in 2、由aclocal命令生成aclocal.m4 3、由autoconf命令生成configure注:很重要!如果这里紧接着直接进行第4步:automake --add-missing:后会出现错误:configure.in:8:required file `./config.h.in' not found紧接着./configure后会出现 config.status: error: cannot find input file:config.h解决办法:在automake --add-missing之前执行autoheader就ok了,一般网上的资料很少有人提到这一步,大家也都是转来转去,所有会导致错误的发生。4、编辑一个Makefile.am文件并由automake(automake --add-missing)命令生成 Makefile.in文件 5、./configure命令生成Makefile (后面有命令介绍)实战:我的源程序结构如下:总共两个目录:viaencode/ 、videolib/,viaencode/下有两个源文件和一个makefile.am文件: encodeapi.c 、viaenc.c 、 Makefile.amvideolib/下有四个头文件: MP4EncApi.h、hw_lib.h、ViaApi.h 、itu.h,以及六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a。生成目标程序viaenc要-到开板中运行。 按照如下步骤来自动生成Makefile吧:1、进入viaencode/目录,运行autoscan命令,命令如下:# cd viaencode/# autoscan2、ls会发现多了一个configure.scan文件。修改此文件,在AC_INIT宏之后加入AM_INIT_AUTOMAKE(viaenc, 1.0),这里hello是你的软件名称,1.0是版本号,即你的这些源程序编译将生成一个软件viaenc-1.0版。“然后把 configure.scan文件的最后一行AC_OUTPUT宏填写完整变成AC_OUTPUT(Makefile),表明autoconf和 automake最终将生成Makefile文件”,这样的话会出错,因为之前有一句AC_CONFIG_FILES([Makefile]),所以我没变。最后把configure.scan文件改名为configure.in。3、运行aclocal命令,ls会发现多了一个aclocal.m4文件。4、然后运行autoconf命令,ls将发现生成了一个可执行的configure命令。5、执行autoheader,前面已讲过。6、编辑一个Makefile.am文件,已有,文件内容如下: bin_PROGRAMS = viaenc viaenc_SOURCES = viaenc.c encodeapi.c AM_CFLAGS = -I../videolib LDADD = -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc - lpthread -luserdev 7、运行automake --add-missing命令。屏幕提示如下:automake: configure.in: installing `./install-sh'automake: configure.in: installing `./mkinstalldirs'automake: configure.in: installing `./missing'8、运行configure命令来生成一个Makefile文件,输入./configure命令即可 9、因为应用程序是要-到开发版中运行,所以必须修改交叉编译工具。修改Makefile中的CC = gcc,改为指向自己的交叉编译工具,CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc。否则会出错!!!运用autoconf和automake的最大好处是,你的程序以源程序方式发布后,其它所有人只需要依次输入./configure ,make,make install命令就可以把你的程序安装在自己的电脑上运行了。所有符合GNU标准的UNIX/Linux都不需要再修改Makefile里的任何字符。总的来说,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~