Linux中源码安装构建软件

前言:转载自某知乎

得到源文件

wget + url #得到压缩文件
unzip or tar 解压压缩文件即可
git clone + url #得到源文件

构建系统

构建系统就是我们常说的“编译源代码”,其实,编译只是从源代码中生成一个可以使用的软件的其中一个阶段。
构建系统是一套工具,用于自动处置不同的任务,以便可以仅通过几个命令就能构建整个软件。

写出和调优一个构建系统是一个非常复杂的任务。但是,作为“终端用户”来说,GNU风格的构建系统使用两个工具让他们免于此难:configuremake

configure文件是个项目专用的脚本,它将检查系统的配置和可用的功能,以确保该项目可以被构建,并最终吻合当前平台的特性。

典型的configure任务的重要部分是去构建Makefile。这个文件包含了有效构建项目所需的指令。

另一方面,make工具是一个可用于任何类Unix 系统的POSIX工具。它将读取项目专用的Makefile 然后执行所需的操作去构建和安装你的程序

文件系统层次化标准(FHS)

大部分典型的Linux发行版的文件系统层次结构都遵从文件系统层次标准(FHS)

这个标准说明了你的系统各种目录的用途,比如,/usr , /tmp , /var 等等。

当使用GNU自动化工具和大多数其他的构建系统时,它会把新软件默认安装在你的系统的/usr/local 目录中。这是根据FHS中“/usr/local”层级是为系统管理员本地安装软件时使用的,它在系统更新覆盖时是安全的。它也可以存放在一组主机中共享,但是又没有放到/usr中的程序和数据,因此,它是一个非常好的选择。

/usr/local层级以某种方式复制了根目录,你可以在/usr/local/bin这里找到可执行程序,在/usr/local/lib中找到库,在/usr/local/share中找到架构无关的文件。

使用 /usr/local 树作为你定制安装的软件位置的唯一问题是,你的软件的文件将在这里混杂在一起。尤其是你安装了多个软件之后,将很难去准确地跟踪 /usr/local/bin 和 /usr/local/lib 中的哪个文件到底属于哪个软件。它虽然不会导致系统的问题。毕竟,/usr/bin 也是一样混乱的。但是,有一天你想去卸载一个手工安装的软件时它会将成为一个问题。

当然我们自定义一个空目录最好比如build,然后将自己定制的软件放到其子目录下 ,然后软件也将依次生成build/bin,build/include,build/lib,build/share。

编译和安装软件

/opt 是为安装附加的应用程序软件包而保留的。
包安装在 /opt 下的软件包必须将它的静态文件放在单独的 /opt/ 或者 /opt/ 目录中,此处 是所说的那个软件名的名字,而 处是提供者的 LANANA 注册名字。

我们将解压完成之后运行make命令,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。

最终,编译结束后,你可以运行sudo make install 命令去安装你的软件。
然后测试它即可。

让shell找到我们自己安装的软件

首先shell定位可执行文件是通过在环境变量PATH中指定的目录里面查找的。

在初始系统中,shell 将首先在 /usr/local/bin 中查找可执行程序;如果没有找到,然后进入 /usr/bin 中查找;如果没有找到,然后进入 /bin查找;如果没有找到,然后进入 /usr/local/games 查找;如果没有找到,然后进入 /usr/games 查找;如果没有找到,那么,shell 将报告一个错误,“command not found”。

所以我们应当将可执行程序的路径放在PATH中。

或者是在bin目录下添加一个符号链接:
sudo ln -sT /opt/node/bin/node /usr/local/bin/node
which -a node || echo not found /suar/local/bin/node

卸载软件

因为我们定制编译的软件全部在 /opt/build 目录中,卸载它不需要做太多的工作,仅使用 rm 命令去删除那个目录即可

猜你喜欢

转载自blog.csdn.net/qq_28485501/article/details/84107402