问题描述
今天在安装redis的时候发现官方的文档上没有说要执行make install,直接cd 到src 目录里面执行redis-server文件就能启动。而看很多别人的笔记呢,则都写了make install,发现实际就是把src目录下的几个二进制文件复制到了系统的/usr/local/bin下面了而已。查了下似乎是说make install执行的是Makefile里面的脚本。实际的作用也就是上面说的复制二进制文件么?只是以redis的安装为例,主要是问安装程序时候的make install
问题解答
回答1:make install (对 make 命令来说)字面意思就是达成 install 这个目标。这个目标既然叫 install,当然是执行软件的安装了。
类 UNIX 系统中,软件的安装通常可选地包含以下步骤:
将文件复制到相应的目录下strip 去掉二进制代码文件中不需要的符号压缩 man 文档及 info 文档更新各类索引,mandb、info 索引,动态链接库缓存,软件自身的文档目录,等等,取决于软件的需要类 UNIX 系统的软件,有些不需要安装,执行可执行文件就可以直接用了。有些则不是这样,比如软件需要的配置文件、资源文件没有复制到相应的位置,包括动态链接库的软件需要更新动态链接库缓存否则会因为找不到刚刚编译出来的动态链接库而出错,等等。
回答2:摘自官方README:
To run Redis with the default configuration just type:
% cd src% ./redis-server
同样,
In order to install Redis binaries into /usr/local/bin just use:
% make install
You can use 'make PREFIX=/some/other/directory install' if you wish to use a different destination.
摘抄自https://github.com/antirez/redis/blob/3.0/Makefile
install: cd src && $(MAKE) $@
不过这个只是去执行src目录下面的make install。看了那个src/文件夹下的Makefile,就是对许多东西(请允许我不一一列举),以/usr/local/bin为目录参数(默认情况)执行install命令。
备注: make后面加一个参数,一般是执行Makefile中的某个目标。比如make install就是执行Makefile中install:下面的一组命令。
那么install命令是什么呢?man install一下,你就知道:
此install 将文件(通常仅是编译后的文件)复制到您所选择的目的位置。
详细内情,自己动手获取吧。