前言

linux并不像windows这样,可以通过很多的可视化界面以及安装包等等点点点就可以直接安装,在linux下,往往是需要下载一个压缩包,然后从解压,编译。而这其中往往绕不开的就是make,参考下面这篇文章,讲的很通透。就不再进行搬砖了。

原文地址

简单理解

我们从某些官网上下载下来的压缩包,一般会进行如下操作:

  1. tar -xvf XXX.tar.gz
  2. cd XXX
  3. ./configure –[option]
  4. make [option]
  5. make install

1和2,自不必说,解压缩然后进入文件夹,3,就是根据你目前的电脑环境, 或者说服务器环境,生成一个叫makefile的文件,当然,这个文件也能够自己写,4就是自动寻找这个makefile,就好像docker在寻找Dockerfile一样,按照其中的指令操作。5,也是通过寻找makefile,然后安装。

cmake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

而cmake,就是为了解决这个问题而存在的,它能够输出针对不同平台的makefile。

官网

rpm编译

rpm包的分类

RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。

linux软件包分为两大类:

(1)二进制类包,包括rpm安装包(一般分为i386和x86等几种)

(2)源码类包,源码包和开发包应该归位此类(.src.rpm)。

安装rpm

yum install rpm-build

yum install rpmdevtools

首先请准备一个Linux环境,比如CentOS。
RPM打包使用的是rpmbuild命令,这个命令来自rpm-build包,这个是必装的。

当然也可以直接安装rpmdevtools,这个工具还包含一些其他的工具,同时它依赖rpm-build,所以直接安装的话会同时把rpm-build装上。

工作目录

RPM打包的时候需要编译源码,还需要把编译好的配置文件啊二进制命令文件啊之类的东西按照安装好的样子放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。rpmbuild命令使用一套标准化的“工作空间”:

rpmdev-setuptree

rpmdev-setuptree这个命令就是安装rpmdevtools带来的。可以看到运行了这个命令之后,在$HOME家目录下多了一个叫做rpmbuild的文件夹,里边内容如下

├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
  1. BUILD:源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录。
  2. BUILDROOT:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除。
  3. RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc)。
  4. SOURCES:收集的源文件,源材料,补丁文件等存放位置。
  5. SPECS:存放spec文件,作为制作rpm包的领岗文件,文件以.spec结尾。
  6. SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了。

这是原文地址,理论偏多,讲的很好。