Linux工程如何从源码的构建到最终 .deb软件包制作?

如何从源码的构建到最终 .deb 软件包制作?

在debian社区中,源码的维护属于upstream,打包.deb并上传属于sponsor,当然还有其他角色负责不同的任务。为了便于理解,姑且将叫upstream以后的部分叫下游。对于上游来说我们除了维护代码,还需要创建脚本来用于构建以及制作tar,然后下游使用tar进行编译与将工程的各个模块打包为.deb。

如何创建上游软件包?

在上游中,往往通过autotools工具链来创建configure以及Makefile.in。其中关键工具包括autoscan、automake、atuoconf,同时需要编写的文件包括Makefile.am、configure.ac/in。工具链协作流程如下:1编写每个模块所有的Makefile.am 2.使用autoscan生成模板configure.scan 3.编辑模板生成configure.ac/in用于构建configure,同时也指导Makefile.in的生成 4.使用aclocal生成.m4的中间文件5.使用autoconf生成configure、automake生成Makefile.in 。

显然这样挨个执行基本的步骤是繁琐的,autotools提供了autoreconf来加速这个过程,我们往往只需要在初始化autogen.sh脚本中执行,其中--install在第一次设置必须的选项,他会拷贝在atuotools必备的辅助文件

atuoreconf --install 

这样看起来不需要知道这些基本步骤,直接傻瓜的使用这行命令就行了,但实际上了解基本步骤对于编写configure.ac和Makefile.am很有帮助,在上图中我们可以看到Makefile.in还收到configure.ac的知道,实际上我们可以使用configure.ac中AM_*的宏来传递一些对makefile的配置,现在让我来了解如何编写configure.ac以及Makefile.am。

configure.ac

我们要知道一点无论是configure.ac还是Makefile.am,其本质就是将特定宏展开为对应的脚本文件,比如在下面使用autoscan生成configure.ac模版:

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([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_OUTPUT

以AC_PROG_CC为例如果将其展开为bash,就需要实现:1、检查 gcccc 是否存在:首先,它会检查系统中是否存在 C 编译器(如 gcccc)。2、尝试编译一个简单程序:它会编译一个简单的测试程序,验证编译器是否能正常工作。3、设置编译器变量:如果编译器可用,它将设置 CC 变量为该编译器的路径。我们来看看第一个功能的脚本实现:

# 1. 检查是否存在 C 编译器
echo "checking for a C compiler..."
if test -n "$CC"; then
  # 如果用户已经设置了 CC 环境变量
  ec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值