2024年11月Linux系统下安装源码软件的技巧(2)

发布时间:

  ⑴如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:

  ⑵___FCKpd___nbsp;make

  ⑶make install:

  ⑷当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,“install”只是Makefile文件中的一个标号,“make install”代表着make工具执行Makefile文件中“install”标号下的所有相关操作,如果在configure阶段没有使用“--prefix=/opt/XXX”指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:

  ⑸#make install

  ⑹make clean:

  ⑺make uninstall:

  ⑻这两个步骤只是安装的后续操作,有一点必须注意,“clean”和“uninstall”也是Makefile文件中相应的两个标号,执行这两个步骤的时候Makefile文件必要保留,“make clean”用来清除编译连接过程中的一些临时文件,“make uninstall”是卸载相关应用程序,与make install类似,make uninstall也需要切换到root执行,不过“uninstall”标号在好多Makefile中都被省略掉了,朋友们完全可以自己在相应的Makefile文件一探究竟。

  ⑼在这里我尝试着解释一下上面这些步骤存在的理由,从C语言的角度来说,一个程序从源码到正确生成相关的可执行文件,下面这些部分必不可少:源文件,编译器,汇编器,连接器,依赖库,通过上面几个步骤,朋友们应该已经知道,真正执行编译链接操作的步骤只有一个(make,那其他步骤存在的理由何在?

  ⑽有一点是肯定的,我在自己的电脑上使用C语言写一些自娱自乐的小程序,也没有用到“configure or make install”之类的命令,顶多自己写个Makefile管理源文件的依赖关系,可是软件开发者不同,他必须考虑到软件的可移植性,他开发的软件不能仅仅就在他自己的pc上跑吧?不同的平台可能连硬件体系结构都不同,这样就导致了Makefile的不可移植性,为了解决这个问题,开发者通常使用autoconf之类的工具生成相应的configure脚本,而configure脚本就是用来屏蔽相应的平台差异,从而正确生成Makefile文件,然后make再根据configure的劳动成果(Makefile完成编译链接工作。

  ⑾至于“install or clean or uninstall”,也只是对应着Makefile文件中不同的规则,关于Makefile的详细信息,朋友们可以自行查阅相关的文档。

  ⑿下面是我在自己的pc机上源码安装tar工具的过程,权当做是上面这些步骤的一个具体事例吧:

  ⒀[rootlocalhost ~]# head -n /etc/issueCentOS release . (Final[rootlocalhost ~]# uname -srLinux ..-.el[rootlocalhost ~]# g --versiong (G .. (Red Hat ..-Copyright (C Free Software Foundation, Inc.

  ⒁这个是我的系统信息。

  ⒂[rootlocalhost tools]# pwd/root/tools[rootlocalhost tools]# lstar-..tar.bz[rootlocalhost tools]# tar jxvf tar-..tar.bz.。。。。。[rootlocalhost tools]# lstar-. tar-..tar.bz[rootlocalhost tools]# cd tar-.[rootlocalhost tar-.]# lsABOUT-NLS build-aux configure gnu Makefile.am po srcacinclude.m ChangeLog configure.ac INSTALL Makefile.in README testsaclocal.m ChangeLog. COPYING lib Make.rules rmt THANKSAUTHORS config.h.in doc m NEWS scripts TODO

  ⒃解压原文件包,可以发现其中包括了configure脚本和README文件。

  ⒄[rootlocalhost tar-.]# mkdir -v ~/tarmkdir: 已创建目录 “/root/tar”[rootlocalhost tar-.]# 。/configure --prefix=/root/tar.。。。。。[rootlocalhost tar-.]# echo $?

  ⒅建立软件安装目录,并configure,检查configure返回结果,为代表运行成功。

  ⒆[rootlocalhost tar-.]# ls -FABOUT-NLS ChangeLog. configure.ac m/ po/ tests/acinclude.m config.h COPYING Makefile README THANKSaclocal.m config.h.in doc/ Makefile.am rmt/ TODOAUTHORS config.log gnu/ Makefile.in scripts/build-aux/ config.status* INSTALL Make.rules src/ChangeLog configure* lib/ NEWS stamp-h

  ⒇可以看到Makefile文件已经被成功建立。

  ⒈[rootlocalhost tar-.]# less Makefile | grep install: || { echo “ERROR: files left after uninstall:” ; install: install-recursiveuninstall: uninstall-recursive

  ⒉在建立的Makefile中存在install和uninstall标号

  ⒊[rootlocalhost tar-.]#make.。。。。。[rootlocalhost tar-.]#echo &?

  ⒋[rootlocalhost tar-.]#make install.。。。。。[rootlocalhost tar-.]# ls /root/tarbin libexec sbin share[rootlocalhost tar]# cd /root/tar/bin[rootlocalhost bin]# lstar[rootlocalhost bin]# 。/tar --help.。。。。。[rootlocalhost tar-.]#echo &?

  ⒌安装并简单测试成功。

  ⒍上面就是Linux下安装源码软件的最简单的方法介绍了,其实源码安装软件没有你想象的那么复杂,只要用对方法,也能很简单的完成软件安装。