首先从一个简单hello world例子入手,然后再运用到实际的项目中。这里主要涉及了autoconf相关工具的使用,了解一些,对自己日常开发大有好处。

1.创建目录结构

最顶层目录以模块名命名叫helloworld,里面有一个src目录存放源文件(helloworld/src).这是惯例。有多个子模块时,各个子模块的源代码放在各自的目录里。

2.创建源文件

在src目录下创建一个main.c文件里面只有一条内容输出hello wrold!!!。

3.创建makefile 模板

1)helloworld/Makefile.am。文件内容:SUBDIRS=src。这里只有简单的一行代码,表示其下有一个src的子目录,如果有多个子目录,用空格分开就行了。

2)helloworld/src/Makefile.am。文件内容:bin_PROGRAMS=helloworld     helloworld_SOURCES=main.c 。这里表示有一个可执行文件helloworld,helloworld由源文件main.c编译而来。PROGRAMS表示要产生的可执行文件,有多个可执行文件时,用空格分开,而bin表示可执行文件要安装的目录。 SOURCES表示生成可执行文件需要的源文件,有多个源文件时,也用空格分开。另外.am扩展名是automake的简称,它是automake用来产生Makefile.in文件的模板。

4.创建aotuconf模板

在helloworld下运行autoscan,生成文件configure.scan,把它改名为configure.in。这是autoconf的模板文件,它的内容大概为:# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_CONFIG_SRCDIR([src/main.c])

AC_CONFIG_HEADER([config.h])

# Checks for programs.

AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile

src/Makefile])

AC_OUTPUT

这个文件由一系列的宏组成,这些宏最终由命令m4展开,得到一个脚本文件configure。configure的主要功能是探测系统的配置,然后 根据这些配置来产生相应的Makefile文件。比如AC_PROG_CC 是用来检测编译器的,AC_CONFIG_FILES和AC_OUTPUT是用来产生Makefile和其它数据文件的。

不过这个模板文件还不能直接使用,需要做下列修改:

把:

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

改为:

AC_INIT(helloworld, 0.1, xianjimli@hotmail.com)

FULL-PACKAGE-NAME 是模块的名称。

VERSION 是模块的版本号,初始版本号都用0.1。对小模块来说用两级版本号就够了,小数点前的为主版本号,只有重大更新时才升级主版本号。小数点后的为次版本号,每次发布都应该升级它。一般升级到0.9后,可以继续升级到0.10、0.11等。

BUG-REPORT-ADDRESS 是作者或维护者的邮件地址。

再加上一行automake的初始化脚本:

AM_INIT_AUTOMAKE(helloworld, 0.1)

helloworld是模块的名称。

0.1是模块的版本号。

这里和前面的参数是重复的,AC_INIT是初始化autoconf的,AM_INIT_AUTOMAKE是初始automake的。在有的情况下,只是产生数据文件,而不需要编译文件时,那就不需要AM_INIT_AUTOMAKE了。

最后得到下面的文件:

# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)

AC_INIT(helloworld, 0.1, xianjimli@hotmail.com)

AC_CONFIG_SRCDIR([src/main.c])

AC_CONFIG_HEADER([config.h])

AM_INIT_AUTOMAKE(helloworld, 0.1)

# Checks for programs.

AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile

src/Makefile])

AC_OUTPUT

o 拷贝所用到宏。

运行:aclocal

前面说了,configure.in里是一系列的宏,这些宏由命令m4负责展开。m4 实际上就是macro的简称,4代表m后面省略了4个字母。类似的还有I18n (Internationalization )和 L10n(Localization),其中的数字都是代表所省略的字母个数。

AC_PROG_CC 之类的宏是标准的宏(或说是内置的宏),不需要我们自己去写它,但我们需要运行命令aclocal,aclocal把configure.in中所用到的 宏全部拷贝到我们的工程里来。在helloworld目录下运行aclocal之后,当前目录下出现了:

autom4te.cache 这是一个临时目录,只是用来加快宏展开的。

aclocal.m4 是configure.in中用到的宏的定义,有兴趣的读者可以看看。

o 产生配置头文件的模板。

运行:autoheader

配置头文件(config.h)是用来定义在C/C++程序中可以引用的宏,像模块的名称和版本号等等。这些宏由configure脚本产生,但我 们要提供一个模板文件。这个模板文件可以用命令autoheader产生出来。在helloworld目录下运行autoheader之后,当前目录下产 生config.h.in,一般情况不用修改它。

o 创建几个必要的文件。

README:描述模块的功能、用法和注意事项等。

NEWS:描述模块最新的动态。

AUTHORS:模块的作者及联系方式。

ChangeLog:记录模块的修改历史,它有固定的格式:

1.最新修改放在最上面。

2.对于每条记录,第一行写日期,修改者和联系方式。第二行开始以tab开头,再加一个星号,后面再写修改的原因和位置等。如:

2009-03-29 Li XianJing

* Created

o 生成Makefile.in和所需要的脚本。

运行:automake -a

这个命令会建立COPYING depcomp INSTALL install-sh missing几个文件的链接,这些文件指向系统中的文件。automake最重要的功能是以Makefile.am为模板产生Makefile.in文 件,Makefile.in相对于Makefile.am要复杂很多倍了,所幸的是我们不需要了解它。

o 产生configure脚本。

运行:autoconf

autoconf的功能是调用m4展开configure.in中的宏,生成configure脚本,这个脚本是最终运行的脚本。

o 产生最终的Makefile。

运行:./configure

configure有两个常用的参数:

–prefix 用来指定安装目录,Linux下默认的安装目录是/usr/local。

–host 用于交叉编译,比如x86的PC机上编译在ARM板上运行的程序。

如:./configure –prefix=/home/lixianjing/work/arm-root/usr –host=arm-linux

o 编译

运行:make

o 安装

运行:make install

o 发布软件包

运行:make dist或者make distcheck

make dist用来生成一个发布软件包,这里会产生一个名为helloworld-0.1.tar.gz的文件。通常,源代码管理系统(cvs/svn/git)中的源代码是处于开发中的,是不稳定的,而发布的软件包则是稳定的,可供用户使用的。

怎样,是不是有点晕了?这里主要是想读者了解其中的原理,在实际操作中,我们可以把make之前的部分动作放到一个脚本文件中,这个脚本文件通常取名为autogen.sh或者bootstrap。

linux下软件发布,LINUX下发布安装自己的软件相关推荐

  1. 华为鸿蒙系统能下app嘛,鸿蒙系统可以安装安卓app软件吗

    [鸿蒙系统可以安装安卓app软件吗]近几年来,随着智能手机硬件的更新迭代.手机系统也愈加成熟完善.我们今天在市面上能看到手机系统基本上可以分为两大类:iOS系统和安卓系统.后者虽在国内有诸多定制版本, ...

  2. linux动画制作软件,如何在Ubuntu中安装2D动画软件OpenToonz

    OpenToonz,开源2D动画软件,现在可以通过Snap软件包轻松安装在Ubuntu 16.04,Ubuntu 18.04及更高版本中. OpenToonz基于Toonz Studio Ghibli ...

  3. 解除安卓车机禁止安装软件_赫兹app下载安装-赫兹交友软件下载v3.5.7 安卓官方版...

    赫兹交友软件是一款别样的交友软件.利用更多的氛围交友模式,通过多种亲密互动来营造你的交友氛围,从听歌到环境音,给你最为真实的体验,勾起你跟TA的话题,让你们能够更好的了解彼此.赶快来2265安卓网试试 ...

  4. linux定位到文件,Linux下文件查找与定位

    Linux下一切皆文件,但是文件由于文件的属性的不同,在查找上可以针对不同的文件做相应的查找以便加快查询速度和减少资源的消耗.注意的是在磁盘中查找是要受到权限控制的,但是在数据库中查找是无权限约束的. ...

  5. 简书 Linux 搜索文件夹,Linux下文件查找

    Linux下一切皆文件,但是文件由于文件的属性的不同,在查找上可以针对不同的文件做相应的查找以便加快查询速度和减少资源的消耗.注意的是在磁盘中查找是要受到权限控制的,但是在数据库中查找是无权限约束的. ...

  6. 如何查看linux安装了那些软件下载,linux中安装软件,查看、卸载已安装软件方法...

    各种主流Linux发行版都采用了某种形式的包管理系统(PMS)来控制软件和库的安装. 软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问.这些服务器称为仓库. 由于Linux ...

  7. linux系统日志_Linux系统学习系列——Linux系统日志管 理(下 )

    Linux日志轮替(日志转储)及logrotate配置文件分析 日志是重要的系统文件,记录和保存了系统中所有的重要事件.但是日志文件也需要进行定期的维护,因为日志文件是不断增长的,如果完全不进行日志维 ...

  8. oracle安装必要的,CentOSOracle安装必要的软件创建数据库

    CentOS Oracle安装系统的特性,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为CentOS系统开源爱好者.CentOS系统用户 CentOS Oracle安装系统的特性 ...

  9. centos oracle创建库,CentOS Oracle安装必要的软件创建数据库

    CentOS Oracle安装系统的特性,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为CentOS系统开源爱好者.CentOS系统用户 CentOS Oracle安装系统的特性 ...

  10. 一加5应用未安装怎么解决_一加手机x安装不了软件下载是什么原因?怎么解决?...

    10月29日下午,一加发布了一加手机X,该机拥有一块5寸1080P分辨率AMOLED屏幕,采用上代高通旗舰骁龙801处理器+2GB RAM+16GB ROM的基本硬件组合(支持与或卡槽内存扩展,并拥有 ...

最新文章

  1. 【算法+OpenCV】基于三次Bezier原理的曲线拟合算法C++与OpenCV实现
  2. mysql 5.7.20主从配置_mysql5.7.20免安装版配置方法图文教程
  3. 一道GCD LCM题目题解
  4. 【机器学习】机器学习从零到掌握之十二 -- 教你使用决策树预测隐形眼镜类型
  5. 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
  6. div+css 背景图片的定位取图问题详解
  7. Ubuntu12.04中安装ns-allinone-2.34
  8. MacOS壁纸文件夹如何查找
  9. 自己做的商城系统流程图,分享给大家.
  10. 客栈V4.21:多一个作品便多一份工作机会
  11. Au入门系列之七:效果器
  12. 【UI】优秀的网站欣赏以及分析
  13. Cassandra在海量数据存储及大型项目案例介绍-part1
  14. 隐马尔科夫模型(HMM)学习笔记二
  15. 下载百度编辑器ueditor
  16. 开关电源原理、电路组成部分
  17. Firefox火狐浏览器在http下允许通知
  18. python3 字符和数字(ASC码)转换
  19. 笔记本电脑无法连接无线网问题
  20. 学渣的刷题之旅 leetcode刷题 7.整数反转

热门文章

  1. 《大五人格心理学》读书笔记
  2. 发明创造-迎合与引导
  3. Windows Event 事件ID介绍
  4. 智慧充电桩系统由什么组成?
  5. ADO记录集相关知识
  6. javascript异步中的回调
  7. 2014全国计算机等级考试报名时间,2014年下半年全国计算机等级考试时间安排
  8. centos定时运行python_CentOS中实现定时执行python脚本的方法
  9. CSDN学院精品课程推荐
  10. 桌面文件太乱了?该整理啦!六种方法任意选!