在自行安装编译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 insatll,这条命令来进行安装,这一步一般需要你有 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’。

转载来自标点符: https://www.biaodianfu.com/linux-configure-make-make-install.html