Linux编译安装中configure、make和make install各自的做用

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。python

./configure是用来检测你的安装平台的目标特征的。好比它会检测你是否是有CC或GCC,并非须要CC或GCC,它是个shell脚本。linux

make是用来编译的,它从Makefile中读取指令,而后编译。c++

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。shell

AUTOMAKE和AUTOCONF是很是有用的用来发布C程序的东西。工具

一、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 察看详细的说明帮助。spa

二、make

这一步就是编译,大多数的源代码包都通过这一步进行编译(固然有些perl或python编写的软件须要调用perl或python来进行编译)。unix

若是 在 make 过程当中出现 error ,你就要记下错误代码(注意不只仅是最后一行),而后你能够向开发者提交 bugreport(通常在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些须要本身仔细研究错误代码。code

make 的做用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,好比 make install 通常表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。

make 是 Linux 开发套件里面自动化编译的一个控制程序,他经过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc 、ld 以及运行某些须要的程序进行编译的程序。通常状况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。

三、make install

这条命令来进行安装(固然有些软件须要先运行 make check 或 make test来进行一些测试),这一步通常须要你有 root 权限(由于要向系统写入文件)


常见问题及解答(Q&A):

Q1: 安装原码程序时,都要执行三步:

./configure
make
make install

他们是什么意思呀?configure要用到gcc或cc。但make时,须要什么?

A1:这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。./configure是用来检测你的安装平台的目标特征的。好比它会检测你是否是有CC或GCC,并非须要CC或GCC,它是个shell脚本。make是用来编译的,它从Makefile中读取指令,而后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

Q2:cc和gcc又是什么?我在用./configure时,它老说我没有cc,没法进行安装,怎么才能有cc?

A2:CC是gcc的链接,gcc是编译器,你安装的时候大概是没有选择开发工具。你本身到光盘上找一下gcc* 吧.装上就好了。或者yum -y groupinstall "Development Tools" 自动安装基本开发工具。

CC是makefile里用来定义编译器的,是为了方便代码移植而设定,由于不一样的平台可能用到不一样的编译器

for exampe:
x86 gcc
mips64 gcc-mips64

当咱们把x86下的code移植到mips64时,只要将makefile里CC=gcc改为CC=gcc-mips64 而不须要将全部出现gcc的地方都改为gcc-mips64。

Linux CC与Linux GCC的区别归纳介绍:

从名字上看,老的unix系统的CC程序叫作C Compiler。但GCC这个名字按GNU的说法叫作Gnu Compiler Collection。由于gcc包含不少编译器(C, C++, Objective-C, Ada, Fortran,and   Java)。因此它们是不同的,一个是一个古老的C编译器,一个是编译器的GNU的编译器的集合(Gcc里的C编译器比CC强大太多了,因此你不必用CC)。当你调用gcc时不必定是调用的C/C++编译器,是gcc根据文件扩展名自动识别并调用对应的编译器,具体可查阅$man gcc。

你是下载不到CC的,缘由是:CC来自于昂贵的Unix系统,CC是商业软件,要想用你须要打电话,写订单,而不是打开你的Browser去download。

linux下的cc是gcc的符号连接,能够经过$ls –l /usr/bin/cc来简单察看。而编译时看到的控制台输出CC则是一个指向gcc的变量,该变量是make程序的内建变量,就算你在Makefile中没有CC= ,该变量也会存在,并默认指向gcc。cc的符号连接和变量存在的意义在于源码的移植性,能够方便的用GCC来编译老的用cc编译的unix软件,甚至连Makefile都不要改。并且也便于linux程序在unix下编译。

近几年的一个新状况是愈来愈多的unix用户,据我所知像solaris,bsd用户也不太使用CC了,人们都必定要装一个gcc,用它来编译C/C++程序。缘由显而易见,gcc足够强大,健壮。支持估计目前为止只有它支持的ISO c/c++ 新特性。固然你最好不要使用night版本的gcc。

Q3:make 和 make install 中的mark是系统自带的命令仍是可执行程序文件?make install中,是否是能够认为 install是mark的参数???

A3:install 不是make的参数,而是在makefile(Makefile)中有如:install:的语句。若是用make install,那么就执行install:后面的语句。

Q4:./config是linux自带的吗?我一make ,老提示我找不到核心类库。

A4:你去把linux的内核模块安装好就好了,在linux的第二张盘里软件的安装方法不是一成不变的,具体的步骤看随tarball提供的INSTALL或者README

Q5:Makefile是什么东东?有什么用?怎么用?

A5:makefile是用于自动编译和连接的,一个工程有不少文件组成,每个文件的改变都会致使工程的从新连接-----可是不是全部的文件都须要从新编译,makefile可以纪录文件的信息,决定在连接的时候须要从新编译哪些文件!

在unix系统下,makefile是与make命令配合使用的。

有了这个Makefile文件,不论咱们何时修改了源程序当中的什么文件,咱们只要执行make命令,咱们的编译器都只会去编译和咱们修改的文件有关的文件,其它的文件它连理都不想去理的。

相关文章
相关标签/搜索