《手把手教你构建自己的 Linux 系统》学习笔记(3)

需要注意的是,制作操作系统权限全程都要用 root

pushd 和 popd

为了方便目录管理,所以出现了这种两个命令,他们的原理就是利用堆栈来实现目录管理。

这两个命令,pushd 负责将指定的目录压入堆栈,语法如下

pushd 你想要压入堆栈的命令

popd 负责将压入堆栈的目录弹出去,使用的后进先出的原则。

如何利用 configure 文件来进行配置?

一般 Linux 的源代码的编译安装等都需要进行配置,这个配置的作用就是检测当前的运行环境是怎样的,究竟适合开启软件的什么功能。

并且你可以在配置的时候,指定你需要的配置选项,比如说要不要编译静态库之类的。

配置的过程一般是使用软件包目录中的 configure 文件来进行的,然后添加参数来进行功能或者选项的设置。

例如:

./configure --prefix=/tools --enable-shared

这里的 prefix 是指定编译生成的文件的目录在哪里

配置文件的参数

make 和 makefile

make 这个命令是根据 makefile 来自动执行一些操作。

在经过正确的配置过程后,一般就会生辰惯用语编译和安装使用的 Makefile 文件了,make 命令可以通过该文件来进行源代码的编译和安装等操作。

一般的编译过程使用 amke 命令就可以完成了,命令如下:

make

而一般的安装过程通过如下的命令来进行:

make install

其中 install 是存在于 Makefile 中的一个标记,make 命令可以根据这个标记中所设置的流程化内容来进行处理。

编译过程,虽然没有任何的指定标记,但是实际上 make 命令会从 Makefile 中查找 all 标记,并且根据该标记的流程来进行处理。

在 Makefile 中可以有很多的标记,不同的标记可以设置一组操作流程,通过 make 自带的参数就可以去执行这些操作,因此 Makefile 的作用不止是局限于编译软件包,很多流程化的工作都是可以使用 Makefile 配合 make 命令来完成的,但是一般 make 命令用于软件包的编译安装工作。

虽然同一个标记在不同的软件包中的含义是不一样的,但是一般还是有约定俗称的流程标记。

常见的编译标记

需要注意点的一点

并不是所有的软件包都需要编译过程,软件包的安装过程也可能只需要复制命令就行了,类似 mac bundle。

判断 make 命令是否正确结束的方法

有两种方法,一种是使用命令

echo $?

如果返回的是 0 就表示正确,如果是非零就表示错误。

另外一种是观察。

当你用 make 命令编译的时候,如果发现输出的一堆文字里,有 error 字样,就说明 make 失败了。

2>&1 是啥意思?

2> 这个代表将错误输出流。

&1 代表正确输出流

2>&1 代表将错误输出流,合并正确输出流,也就是说,正确输出和错误输出都有了,信息完整。

因为默认情况下,具体的错误信息输出是不会显示出来的。

如何判断软件包里面安装的文件?

通过指定 make 安装的目录来进行指定,只要你将所有的安装文件都安装到制定的目录中,这样只要看一下这个目录就可以知道这个软件包所安装的文件了。

也就是利用 make 的一个参数「DESTDIR」,该参数在 make install 中进行制定。

DESTDIR 一直是被默认实用的,如果不专门制定,DESTDIR 被定义为空,不会影响实际的安装路径,比如制定某个软件包的 prefix 参数为 /usr 那么一般情况下 make install 是将文件以 /usr 为基础目录来进行安装的,而实际上安装的目录是以 ${DESTDIR}${prefix} 这样的形式来处理的。

如果 DESTDIR 没有制定,那么就等于是 ${prefix} 所以就安装到了 /usr 目录下了,如果 DESTDIR 被指定为非空的目录,那么安装程序就把文件安装在这个目录下的 ${prefix} 也就是默认的 /usr 目录下。

并不是所有的软件包都可以通过设置 DESTDIR 这个参数来制定目录的

有些会使用 ROOT 还有写软件包会使用 PREFIX 来制定,所以你如果要指定目录的话,一定要查看软件包中的说明文件来了解一下,也可以只直接查看 Makefile 是否定义了 DESTDIR 活着其他几个常见的目录制定参数来判断是否支持制定目录安装。

原文地址:https://www.cnblogs.com/0x1D/p/4727055.html