在自行安装编译 Linux 软件过程中会执行三个步骤:./configure, make, make install。这三个步骤在安装过程中到底起到什么作用,先前一直糊里糊涂的,今天就来一起学习下。
./configure (配置)
configure 会根据当前系统环境和指定参数生成 makefile 文件,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码: ./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin(而不是默认的 /usr/local/bin), 资源文件就会安装在 /usr/share(而不是默认的 /usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。它常用的参数如下:
- –help:输出帮助信息
- –prefix=PREFIX:将所有文件安装到 PREFIX 文件夹下。实际上不同的文件会被安装到不同的子文件夹中。
- –exec-prefix=EXEC-PREFIX:结构依赖文件的安装位置。默认与 PREFIX 相同。
- –bindir=BINDIR:可执行程序目录。默认为 EXEC-PREFIX/bin。
- –datadir=DATADIR:程序所需只读文件的目录。默认为 PREFIX/share。
- –sysconfdir=SYSCONFDIR:配置文件的目录。默认为 PREFIX/etc。
- –libdir=LIBDIR:库文件和动态装在模块的目录。默认为 EXEC-PREFIX/lib。
- –includedir=INCLUDEDIR:C 和 C++ 头文件的目录。默认是 PREFIX/include。
- –docdir=DOCDIR:文档文件目录。默认是 PREFIX/doc。
- –mandir=MANDIR:手册目录。默认是 PREFIX/man。
- –with-includes=DIRS:DIRS 是一系列冒号分隔的文件夹,这些目录被加入到编译器的头文件中。例如:–with-includes=/opt/gun/includes/
- –with-libraries=DIRS:DIRS 是一系列冒号分隔的文件夹,这些目录用于查找库文件。例如:–with-libraries=/opt/gnu/lib:/usr/sup/lib
- –enable-locale:打开区域支持。
- –enable-recode:打开单字节字符集记录的支持。
- –enable-multibyte:允许使用多字节编码。
make (编译)
make,这一步就是编译,当执行 make 的时候,make 会在当前目录下搜索 Makefile(makefile)这个文本文件,而 makefile 里面记录了源码如何编译的详细信息。
make install (安装)
make install,这条命令来进行安装,这一步一般需要你有 root 权限(因为要向系统写入文件)。
其他命令:
- make clean 清除编译产生的可执行文件及目标文件。
- make distclean 除了清除可执行文件和目标文件外,把 configure 所产生的 Makefile 也清除掉。
- make dist 将程序和相关的档案包装成一个压缩文件以供发布。
怎么卸载编译安装 (make install) 的软件?
使用安装包自带的反安装程序
常见的反安装 target 有:make uninstall/distclean/veryclean 等,但并不是每个源代码包都提供反安装,这不是个通用方法等。
通过删除编译时设置的单独目录
如果编译时设置了 –prefix 到一个单独的文件夹,就删除那个文件夹即可,但如果编译安装到了类似 /usr 这种地方,找一个临时目录重新安装一遍,如:
./configure –prefix=/tmp/to_remove && make install
然后遍历 /tmp/to_remove 的文件,删除对应安装位置的文件即可。
通过安装日志删除
安装日志里能够看得到到底安装了那些文件到那些位置,通常会使用 ‘cp’ 或者 ‘install’ 命令拷贝文件。可以事先记得记录 ‘make install’ 的所有输出日志,’make install &>| tee make.log’。