linux软件下载管理

这篇博客详细介绍了Linux下软件的安装方法,包括二进制安装(如tar.gz、bz2软件包和带有安装程序的软件包)、RPM安装(以MySQL为例)以及通过yum进行软件管理。还讨论了源码编译安装的优缺点和步骤,涉及Makefile的使用。

软件安装介绍

学软件开发,各种台的软件熟练安装是必须要熟练掌握。⼤家都知道,Windows下安装软件时,只需⽤⿏标双击软件的安装程序,或者⽤Zip等解压缩软件解压缩即可安装;在android或者apple中安装软件时,只需要在⼿机应⽤商店点击安装即可。⽽在Linux下安装软件难度⾼于Windows、Android、ios和windows phone下软件安装。下⾯我就详细讲解Linux下如何安装软件。
Linux下软件的安装⼤概可以分为如下⼏种:

1 ⼆进制程序的安装(最简单安装)
2 rpm程序安装(后缀名为*.rpm)
3 yum源安装(本质也是rpm安装,它只是rpm的⼀种安装⽅式⽽已)
4 源码安装

2. ⼆进制安装

Linux下⼆进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在安装时只需解压或者执⾏安装可执⾏⽂件即可。这种软件发⾏格式类似与windows系统,这样做的原因是保护源代码程序不对外泄露,保护知识产权。⼆进制软件包的优点是安装简单、容易,缺点是缺乏灵活性,相应的软件包执⾏在对应平台下安装,离开这个环境软件就⽆法运⾏。

⼆进制软件包提供了很多类型的打包⽅式,最常⻅的就是我们RPM格式的包,还有以“.tar.gz、.tgz、*.bz2“等形式的⼆进制软件包,最后还有⼀个就是提供安装程序进⾏安装的⼆进制软件包。下⾯分别介绍

安装*.tar.gz、*.bz2⼆进制软件包

这种格式的软件包,安装其实就是简单的解压过程,根据不同的软件打包格式,我们⽤相应的解压命令解压即可。

对于*.tar.gz软件格式解压:tar –zxvf xxxxxx.tar.gz 对于*.bz2软件格式解压: tar -jxvf xxxxxx.tar.gz这类软件的卸载,对于解压后只有单⼀⽬录的软件,可以直接删除对应软件⽬录即可,如果解压后⽂件分散在⼏个⽬录中,需要⼀⼀⼿动删除⽬录。
例如:我们常⽤的应⽤服务器容器tomcat软件就是基于这种打包压缩格式发⾏的。我们只需下载后解压即可完成安装,如果需要卸载,直接删除对应的tomcat⽬录即可。

提供安装程序的软件包

这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进⼊安装⽬录,找到类似的setup、install、install.sh之类的可执⾏⽂件运⾏即可,然后根据提示(⽐如安装路径,参数设置等等)进⾏相应的设置,接着安装就⾃动完成。
这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸
载。
例如:经常使⽤的sun jdk就是这种安装⽅式,从⽹络下载下来的jdk是个⼆进制可执⾏⽂件,⾸先设置⽂件的可执⾏权限(例如chmod 755 jdk1.6.0_07.bin,权限操作本书后⾯会有详细讲述) ,然后运⾏软件(也即是./ jdk1.6.0_07.bin)即可完成安装。安装完成会在当前⽬录产⽣⼀个对应的jdk程序⽬录。

rpm安装

RPM软件包管理
RPM是RedHat Package Manager(RedHat软件包管理⼯具)的缩写,这⼀⽂件格
式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括
RedHat、CentOS、SUSE等Linux的发⾏版本都有采⽤,可以算是公认的⾏业标准
了。RPM⽂件在Linux系统中的安装最为简便
RPM命令使⽤
rpm的常⽤参数

i:安装应⽤程序(install)
vh:显示安装进度(verbose hash)
U:升级软件包(update)
qa: 显示所有已安装软件包(query all)
e:卸载应⽤程序(erase)
注意:如果其它软件包有依赖关系,卸载时会产⽣提示信息,可使⽤--nodeps强⾏卸
载。
查询所有安装的rpm包: [root@qianfeng01 ~]# rpm –qa
查询mysql相关的包: [root@qianfeng01 ~]# rpm –qa | grep mysql
安装:[root@qianfeng01 ~]# rpm -ivh jdk.rpm
卸载: [root@qianfeng01 ~]# rpm –e mysql*
强⾏卸载:[root@qianfeng01 ~]# rpm –e mysql* --nodeps

rpm安装MySQL

1. 安装包准备

通过SSH⼯具,将MySQL的RPM安装包上传到Linux的 ~/softwares ⽬录下。
MySQL的RPM安装包,可以在MySQL的官⽹下载,也可以直接使⽤课程提供的资料。
注意事项:
- 在官⽹下载安装包的时候,注意版本号
- mysql-community-server-5.7.28-1.el7.x86_64.rpm
- 这⾥的el7,表示适⽤于CentOS7的版本。注意,不要下载el6的

2. 环境准备

# CentOS7中,系统默认采⽤的数据库是mariadb,这个数据库与MySQL冲突!
# 因此,在安装MySQL之前,需要先将其卸载!
[root@qianfeng01 ~]# rpm -qa | grep mariadb # 查询是否已经安装了mariadb
mariadb-libs-5.5.64-1.el7.x86_64
# 查询结果。如果没有这个结果,说明没有安装。
# 强制卸载mariadb
# --nodeps: 强制卸载,RPM卸载程序的时候,如果这个程序被其他的程序依赖,是⽆法卸载的。
# 此时,就需要使⽤--nodeps,忽略依赖,强制卸载。
# 下⾯的卸载命令中,卸载的包是上⽅查询到的包
[root@qianfeng01 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps

3. 安装MySQL

# 安装MySQL, 其实就需要安装 mysql-community-server, 但是它依赖其他的包
[root@qianfeng01 mysql]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[root@qianfeng01 mysql]# yum install -y perl
[root@qianfeng01 mysql]# yum install -y net-tools
[root@qianfeng01 mysql]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
  1. MySQL的配置
    4.1. 启动MySQL服务
# 查看MySQL服务的运⾏状态
[root@qianfeng01 ~]# systemctl status mysqld
# 如果MySQL服务没有开启,则开启
[root@qianfeng01 ~]# systemctl start mysqld

4.2. 登录到MySQL

# 在第⼀次开启MySQL服务的时候,会⾃动⽣成⼀个随机的密码
[root@qianfeng01 ~]# grep password /var/log/mysqld.log #到mysqld.log⽂件中查找password
2020-12-16T07:47:14.117739Z 1 [Note] A temporary password is
generated for root@localhost: pVLJs6&o(QQe
# 使⽤这个随机密码登录到MySQL
[root@qianfeng01 ~]# mysql -u root -p
pVLJs6&o(QQe # 这⾥⽤⾃⼰的密码登录

4.3. 修改密码

# 1. 修改MySQL的密码策略(安全等级)
# MySQL默认的密码安全等级有点⾼,在设置密码的时候,必须同时包含⼤⼩写字
⺟、数字、特殊字符,以及对位数有要求
show variables like '%validate_password%'; # 查
看密码策略
set global validate_password_policy=LOW;
# 修改密码策略等级为LOW
set global validate_password_length=4;
# 密码的最⼩⻓度
set global validate_password_mixed_case_count=0; # 设置密码
中⾄少要包含0个⼤写字⺟和⼩写字⺟
set global validate_password_number_count=0; # 设
置密码中⾄少要包含0个数字
set global validate_password_special_char_count=0; # 设置密码中⾄
少要包含0个特殊字符
# 2. 修改密码
alter user root@localhost identified by 'Root123@';
# 3. 远程连接mysql服务器
可以先⽤windows平台的⼯具访问linux系统上的mysql服务器,如果提示不让远程登
录,看下⾯的解决办法
常⻅错误分析:
1.不让远程登录的解决办法
⾸先注意:设置完成后,root的密码变成了mysql
不让远程登录:如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执⾏)
mysql -uroot -p
#(执⾏下⾯的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接)
123456789
输⼊命令说明:GRANT ALL PRIVILEGES ON . TO ‘⽤户名’@’%’ IDENTIFIED
BY ‘你的密码’ WITH GRANT OPTION;
让客户端在远程登录拥有权限,密码重新设置成mysql
输⼊命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED
BY 'mysql' WITH GRANT OPTION;
输⼊命令:FLUSH PRIVILEGES; 将命令写⼊授权表
让客户端在本地登录拥有权限,密码重新设置成mysql
输⼊命令:grant all privileges on *.* to root@"localhost"
identified by "mysql" with grant option;
输⼊命令:FLUSH PRIVILEGES;
2.执⾏mysql -uroot -p
或者
第⼀次安装完mysql后 执⾏/usr/bin/mysql_secure_installation 脚本,
出现 Enter current password for root (enter for none): 点击回
⻋后出现下⾯的错误
mysql Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock' (2)
错误原因:/var/lib/mysql⽬录中socket⽂件不存在。
连接mysql服务器有两种⽅式:tcp连接,通过socket⽂件连接。通过socket⽂件,
启动mysql服务,mysql服务会⾃动⽣成⼀个sock⽂件,⽣成的sock⽂件默认放在 -
-datadir=/var/lib/mysql,mysql默认从/var/lib/mysql⽬录读取sock⽂
件。
解决办法:
1、看看/var/lib/mysql/mysql 有没有mysql.sock⽂件
2、没有mysql.sock,重启mysql服务,看看有没有。
3、没有的话,ps aux|grep mysql|grep -v 'grep' 查看mysql服务⽣成的
sock在哪个⽬录,看看这个⽬录有没有。
4、如果mysql服务⽣成在其他⽬录,解决办法有:
⽅法⼀ 修改mysql服务⽣成的⽬录,在/etc/my.cnf 中[mysqld] socket
⾸先确认在etc/下有没有my.cnf⽂件
如果是rpm安装的mysql,默认这⾥没有.需要将usr/share/mysql下的
my•medium.cnf拷⻉到/etc/下并改名成my.cnf
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
⽅法⼆ mysql从/var/lib/mysql/读取sock⽂件,建⽴⼀个软连接,或者copy过来
⽅法三 还可以找到当前的mysql进程,将他删掉,重新启动

5. 重新登录

试着退出MySQL,⽤新的密码重新登录。如果可以登录成功,那么MySQL的安装就到此结束!
MySQL在安装完成后,是不需要配置环境变量的。因为RPM的安装特性,启动脚本会被放
到/usr/bin下。这个路径本来就在环境变量⾥⾯,不需要单独配置。

软件安装之yum

yum的简介

yum,是Yellowdog Updater Modified的缩写,是Linux⼀种软件包管理⼯具。
在之前的课程中,我们学习过了RPM的安装。RPM的安装,其实是Linux中的标准的安装⽅式。但是RPM有⼀个⾮常麻烦的地⽅,就是需要⼿动管理安装包;另外,RPM是不能⾃动的解决依赖缺失的。在安装的软件的时候,如果这个程序需要依赖其他的程序,则需要我们⼿动安装,参考上⼀篇的练习: MySQL的安装。每⼀个依赖的程序都需要我们⼿动安装。
yum则完美的解决了这样的问题。使⽤yum安装,不需要关⼼这个软件包依赖什么程序,yum会⾃动的帮你安装依赖的组件。
yum的本质其实还是RPM的安装,yum只是对其进⾏了⾃动的管理,不需要我们再⼿动的管理依赖。

阿⾥云镜像替换

yum是⼀个在线安装软件的管理⼯具,因此需要通过⽹络下载软件。
yum⾃带的镜像是⼀个国外的地址,速度会⽐较慢。因此在使⽤的过程中,很多时候我们是需要将其替换为国内的源的。
常⻅的国内的源:
http://mirrors.163.com # ⽹易的源
http://mirrors.sohu.com # 搜狐的源
http://mirrors.tuan.tsinghua.edu.cn # 清华⼤学源
http://mirrors.ustc.edu.cn # 中科⼤源
https://mirrors.aliyun.com # 阿⾥巴巴的源

替换阿⾥源

# 1. 切换到源⽂件的路径下
# 在这个路径下,有若⼲个repo⽂件,⾥⾯记录的就是源信息
# ⽹络镜像源,在CentOS-Base.repo中
[root@qianfeng01 ~]# cd /etc/yum.repos.d
# 2. 将原来的源备份
[root@qianfeng01 yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
# 3. 下载阿⾥云的源配置信息到本地
[root@qianfeng01 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-
Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 4. 重新构建YUM的缓存
[root@qianfeng01 yum.repos.d]# yum clean all
[root@qianfeng01 yum.repos.d]# yum makecache

yum的基本操作

查询

yum list # 查询所有可⽤软件包列表
yum search 关键字 # 搜索服务器上所有和关键字相关的包
yum info 关键字 # 来查找包名

安装

yum -y install 包名 # -y ⾃动回答yes 

升级

yum -y update 包名
# 注意:如果不加包名,就升级所有的,包括内核。必须加包名升级单个软件包,慎⽤升级所有的
# 检测升级 yum check-update

卸载

yum -y remove 包名

其他操作

yum --help、man yum # 帮助
yum clean all # 清除缓存和旧的包
yum repolist # 查看当前可⽤的yum源
yum deplist httpd # 列出⼀个包所有依赖的包

搭建本地yum源

  1. 挂载光盘
  2. ⾃⼰创建 /mnt/cdrom ⽂件夹,为了挂载光盘的内容
[root@qianfeng01 ~]# mkdir /mnt/cdrom 
  1. 挂载相关命令
    在这里插入图片描述

  2. 命令解析

    ##命令格式:mount [-t vfstype] [-o options] device dir
    其中:
    #1.-t vfstype 指定⽂件系统的类型,通常不必指定。mount 会⾃动选择
    正确的类型。常⽤类型有:
    光盘或光盘镜像:iso9660
    DOS fat16⽂件系统:msdos
    Windows 9x fat32⽂件系统:vfat
    Windows NT ntfs⽂件系统:ntfs
    Mount Windows⽂件⽹络共享:smbfs
    UNIX(LINUX) ⽂件⽹络共享:nfs
    #2.-o options 主要⽤来描述设备或档案的挂接⽅式。常⽤的参数有:
    loop:⽤来把⼀个⽂件当成硬盘分区挂接上系统
    ro:采⽤只读⽅式挂接设备
    rw:采⽤读写⽅式挂接设备
    iocharset:指定访问⽂件系统所⽤字符集
    #3.device 要挂接(mount)的设备。
    #4.dir设备在系统上的挂接点(mount point)。
    ##将镜像⽂件挂载在/mnt/cdrom下
    [root@qianfeng01 ~]# mkdir /mnt/cdrom #在根⽬录下的mnt⽬录下创建⽬录cdrom
    [root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom
    /mnt/cdrom ##挂载
    [root@qianfeng01 ~]# umount /mnt/dvd
    ##卸载
    

    让⽹络源失效

    [root@qianfeng01 yum.repos.d]# cd /etc/yum.repos.d/
    [root@qianfeng01 yum.repos.d]# rename .repo .repo.bak *
    #重命名所有的.repo⽂件
    [root@qianfeng01 yum.repos.d]# cp CentOS-Media.repo.bak CentOS-Media.repo #配置⼀个.repo⽂件
    

    对CentOS-Base.repo的解释

    [root@qianfeng01 yum.repos.d]# cat /etc/yum.repos.d/CentOS-Base.repo
    [base]
    name=CentOS-$releasever - Base
    mirrorlist=http://mirrorlist.centos.org/?
    release=releasever&arch=basearch&repo=os
    baseurl=http://mirror.centos.org/centos/releasever/os/basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    解释:

[base] 容器名称,⼀定要放在[]中
name 容器说明,这个可以⾃⼰随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl yum源服务器的地址。默认是CentOS官⽅的yum源服务器
enabled 此容器是否⽣效,如果不写或写enable=1都是⽣效,写成
enable=0就是不⽣效
gpgcheck 如果是1是指RPM的数字证书⽣效,如果是0则不⽣效
pggkey 数字证书的公匙⽂件保存位置,不⽤修改

修改光盘yum源⽂件

[root@qianfeng01 yum.repos.d]# vi CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#这⾥的地址为⾃⼰光盘挂载地址,并把不存在的地址注释掉,在⾏⾸注释
# file:///media/cdrom/
# file:///media/cdrecorder/
gpgcheck=1
enabled=1 #把原来的0改为1,让这个yum源配资⽂件⽣效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

可使⽤ yum repolist 查看当前可⽤yum源

yum clean all
yum repolist

注意点

1 如果⼀旦重启服务器,需要重新挂载
2 需要检查当前的虚拟机的镜像⽂件挂载处,将已经连接前⾯打勾
3 如果镜像⽂件有两个DVD,我们可以这样做
1)再添加⼀个光驱,将DVD2连接进来
2)将服务器重启,发现在/dev下有了两个镜像⽂件(cdrom和cdrom1)
3)在/mnt下再去创建⼀个⽂件夹(cdrom1)
4)分别进⾏挂载操作
[root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
[root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom1 /mnt/cdrom1
5)到/etc/yum.repos.d⾥⾯,同时添加路径

file:///mnt/cdrom
file:///mnt/cdrom1

搭建局域⽹yum源

  1. 选择局域⽹内的⼀台机器作为YUM源服务器,安装HTTP服务进程
[root@qianfeng01 ~]# yum list | grep http
[root@qianfeng01 ~]# yum -y install httpd.x86_64
  1. 开启HTTP服务进程并设置开机⾃启动

    [root@qianfeng01 ~]# service httpd start
    [root@qianfeng01 ~]# chkconfig httpd on
    
  2. 配置HTTP服务管理YUM源⽬录

    # HTTP服务进程管理的⽬录是/var/www/html
    # 在管理⽬录下,创建软连接,指向YUM源⽬录
    [root@qianfeng01 ~]# ln -s /mnt/dvd /var/www/html/repo
    <===都是⽤绝对路径,保没错
    
  3. 其他机器只需要把本地YUM源的路径指向局域⽹YUM源地址即可

    [root@qianfeng01 yum.repos.d]# vi local.repo #
    编辑⽂件,后缀必须是.repo
    [local]
    <=== YUM源仓库名
    name=localrepo
    <=== 昵称
    baseurl=http://局域⽹IP/repo
    <=== 局域⽹YUM仓库位置
    enabled=1
    <=== 1 表示启⽤,0表示禁⽤
    gpgcheck=1
    <=== 1 表示 校验
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    <=== 校验钥匙
    

软件安装之源码安装

源码编译安装

由于linux操作系统开放源代码,因⽽在其上安装的软件⼤部分也都是开源软件,例如apache、tomcat、php等软件。开源软件基本都提供源码下载,源码安装的⽅式;

源码编译安装的优点

1 ⽤户可以⾃⼰定制软件功能,安装需要的模块,不需要的功能可以不⽤安装。
2 ⽤户还可以⾃⼰选择安装路径,⽅便管理。
3 卸载软件也很⽅便,只需删除对应的安装⽬录即可。
4 能最⼤程度和服务器平台融合,效率稍微⽐其他⽅式⾼。
5 没有windows所谓的注册表之说。

源码编译安装的缺点

1 安装较为繁琐,需要⾃⼰配置
2 安装较为耗时,需要⾃⼰编译源码
3 安装较为容易出错,出错也难以解决

安装步骤

源码安装软件⼀般有以下⼏个步骤组成:下载解压源码、分析安装平台环境
(ifconfigure)、编译安装软件(make,make install)。下⾯我们分别介绍。

1.下载解压源码

linux下软件的源码⼀般都是C或者C++语⾔编写的,并且都会在软件的官⽅⽹站上提供源码包下载,例如apache开源项⽬的官⽅⽹站为
http://www.apache.org,此外在⽹上的很多开源社区⼀般也提供⼀些常⽤软件
的源码下载,源码都打包成压缩⽂件,常⻅的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。我们可以从⽹站上⾸先下载源码⽂件,然后在传到所在的linux系统下,如果你的linux系统处于联⽹状下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。

下载完成,把相应的软件解包即可,针对下载软件包的不同,使⽤不同的⽅法进⾏解压,解压完毕后进⼊解压⽣成的⽬录中,在这个⽬录下,⼀般都存在⼀个REDAME⽂件,这个⽂本⽂件⾮常重要,它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装⽅式等等,由于linux各个版本的差异,以及安装环境的不同,软件的安装⽅式也不尽相同,所以在安装软件前,⼀定要事先阅读这个README⽂件,确保安装的正确性。

2. 分析安装平台环境

在软件包解压完毕之后,我们进⼊源码⽬录,⼀般都会存在configure和README这么两个⽂件,README就是上⾯我们讲到的,是对软件的介绍和安装说明;linux下软件的安装受到操作系统安装环境的影响,⽐如某些软件在安装或者运⾏过程中需要调⽤操作系统本身的库⽂件,或者需要运⾏系统的某个⼯具等等,但是系统中不存在这个库⽂件或者这个⼯具没有安装,那么安装或者运⾏软件就会失败。

为了避免这个问题的出现,在安装软件的时候就需要分析操作系统环境,检测当前系统是否拥有安装软件所需的所有⽂件和⼯具,如果系统缺少某个⽂件,就给出提示,直到满⾜软件的所有需求为⽌。这个就是configure⽂件的功能,configure⽂件⼀般是个可执⾏⽂件,可以在当前⽬录下直接输⼊“./configure”进⾏软件安装的环境测试,如果提示缺少某些安装包,就需要进⾏安装,直到测试通过。通常的,源码安装需要GCC或者CC编译器,这些编译器⼀般在安装系统时定制安装包中的开发⼯具选项下,其实这也是我们在第⼆章安装linux系统中要求选择开发⼯具包的原因所在。

此外,在执⾏configure分析软件需求时,还可以在“./configure”后⾯加上软
件的安装路径以及安装所需的模块等等⼀些选项,来定制⽤户需要的软件功能。

3. 编译安装软件

在验证软件安装环境后,正式进⼊软件的编译步骤,在进⾏编译前,⾸先了解下关于编译的⼀些基础知识。

在linux系统下,make是我们经常⽤到的编译命令,⽆论是安装软件还是项⽬开发,都会经常⽤到编译安装命令,也就是make和make install,对于⼀个包含很多源⽂件的应⽤程序,使⽤make和makefile⼯具可以简单快速的解决各个源⽂件之间复杂的依赖关系,同时,make⼯具还可以⾃动完成所有源码⽂件的编译⼯作,并且可以只对上次编译后修改过的⽂件进⾏增量编译,因此,熟练掌握了make和makefile⼯具之后,源码安装软件就变的像windows下安装软件⼀样简单。

4. Makefile⽂件介绍

make⼯具最主要的功能就是通过makefile⽂件来实现的,makefile⽂件是按照某种语法来进⾏编写的,⽂件中定义了各个源⽂件之间的依赖关系,并说明了如何编译源⽂件并⽣成可执⾏⽂件,它通过描述各个源程序之间的关系让make⼯具⾃动完成编译⼯作。

在linux系统下,习惯⽤Makefile替代makefile⽂件,我们在执⾏configure通过后,就会在当前⽬录下⽣成这个⽂件,⼀般情况下在命令⾏输⼊make时,make命令会默认去寻找当前⽬录下的Makefile⽂件,如果我们⽤其它⽂件作为makefile,就要在make命令选项后指定makefile⽂件,例如我们设定编译规则⽂件为make_file,就需要使⽤以下命令指定:[root@WEBServer ~]#make -f make_file

5. Makefile举例

下⾯我们通过举例了解下Makefile的编写原则和内容。

例如有⼀个test程序,有三个源⽂件file1.c、file2.c、file3.c以及库⽂件LS编译⽣成,这三个源⽂件还分别包含了⾃⼰的头⽂件1.h、2.h、3.h。通常,C编译器将会输出三个⽬标⽂件file1.o、file2.o、file3.o。假定file1.c和file3.c都要声明⽤到⼀个apcs的⽂件,但是file2.c不⽤,也就是在file1.c和file3.c⽂件中都有类似“#include “apcs””的声明。

下⾯这段代码就是对test程序的描述:
1 #It is a example for describing makefile
2 test: file1.o file2.o file3.o
3 cc file1.o file2.o file3.o -LS -o test
4 file1.o: file1.c 1.h apcs
5 gcc -c file1.c
6 file3.o: file3.c 3.h apcs
7 gcc -c file3.c
8 file2.o: file2.c c.h
9 gcc -c file2.c

这个描述⽂档其实就是⼀个makefile⽂件,第⼀⾏为注释⾏,第⼆⾏指定test程序有file1.o、file2.o、file3.o链接⽣成,第三⾏描述了如何从test所依赖的⽂件建⽴可执⾏⽂件,接下来的第四、六、⼋⾏定义了三个⽬标⽂件和它们依赖的“.c”、“.h”和“apcs”⽂件。剩下的第五、七、九⾏定义了如何从⽬标依赖的⽂件⽣成可执⾏⽂件。

在了解Makefile⽂件结构后,我们就可以控制编译的选项,定制⾃⼰所需的软件功能。

接下来,我们只需在命令⾏输⼊make命令,即可进⼊编译阶段,根据软件源程序的⼤⼩和系统的硬件配置,编译时间不定,编译完毕,会在当前⽬录以及⼦⽬录下⽣成相应的可执⾏⽂件,接下来就进⼊最后的安装软件阶段,在命令⾏输⼊make install命令,开始安装软件,安装进程会⾸先创建安装⽬录,如果我们没有指定安装的⽬录,安装程序默认会安装在系统的/usr/local⽬录下创建安装⽬录,然后将相应的⽂件和可执⾏程序从源码⽬录拷⻉到安装⽬录下,这样安装就完毕了。

.c 3.h apcs
7 gcc -c file3.c
8 file2.o: file2.c c.h
9 gcc -c file2.c

这个描述⽂档其实就是⼀个makefile⽂件,第⼀⾏为注释⾏,第⼆⾏指定test程序有file1.o、file2.o、file3.o链接⽣成,第三⾏描述了如何从test所依赖的⽂件建⽴可执⾏⽂件,接下来的第四、六、⼋⾏定义了三个⽬标⽂件和它们依赖的“.c”、“.h”和“apcs”⽂件。剩下的第五、七、九⾏定义了如何从⽬标依赖的⽂件⽣成可执⾏⽂件。

在了解Makefile⽂件结构后,我们就可以控制编译的选项,定制⾃⼰所需的软件功能。

接下来,我们只需在命令⾏输⼊make命令,即可进⼊编译阶段,根据软件源程序的⼤⼩和系统的硬件配置,编译时间不定,编译完毕,会在当前⽬录以及⼦⽬录下⽣成相应的可执⾏⽂件,接下来就进⼊最后的安装软件阶段,在命令⾏输⼊make install命令,开始安装软件,安装进程会⾸先创建安装⽬录,如果我们没有指定安装的⽬录,安装程序默认会安装在系统的/usr/local⽬录下创建安装⽬录,然后将相应的⽂件和可执⾏程序从源码⽬录拷⻉到安装⽬录下,这样安装就完毕了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值