.configure/make/make install的作用

来源:互联网 发布:linux网络相关命令 编辑:程序博客网 时间:2024/05/29 04:23

1、make
根据makefile制定的规则,将c\c++文件编译成*.o文件,然后进一步生成可执行文件。

2、make clean
删除源代码(C\C++ code)生成的执行文件和所有的中间目标文件。

3、make depend
一种makefile的规则,通过扫描整个目录下的所有C\C++ 代码,判断文件之间的依赖关系,如a.cc文件中调用了b.h(如以形式include<b.h>),如果之后a.cc文件被改动,那么只需要重新编译a.cc文件,不需要编译b.h文件。否则所有的文件都需要重新编译。

补充:

  一般来说,make其实是make all的省略;make后面跟的是target,即你要编译的目标,在makefile里面会列出这个target依赖于哪几个别的target,别的target又依赖于另外的target,如此“递归”,最终会到依赖的源文件和头文件;当然,也有可能这个target后面直接就是源文件和头文件(最简单的情况)。make all和make depend没有本质区别,都是生成某个目标,只是目标名称不同而已;至于编译的结果,就取决于makefile的写法,如果makefile中目标all和目标depend的依赖一样,那么结果也将是相同的。你完全可以修改makefile,把他们的功能完全弄反。现阶段,很多软件已经不需要或者不支持make depend了,比如编译linux 2.6的时候,根本不需要make depend,而早期的linux 2.4,则一般需要make depend这一步。总之,make的目标和功能完全由makefile决定。make 可以取代make depend.

一般顺序:./configure;make clean;make depend;make重新编译后使用make install或者./install安装即可。

./configure && make && make install

./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC(cc是gcc的连接.gcc是编译器.),并不是需要CC或GCC,它是个shell脚本。
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。install 不是make的参数,而是再makefile(Makefile)中型如:install:的语句。如果用make install,那么就执行install:后面的语句。




在linux安装软件会用到诸如configure/make/make install的命令,这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。

 

  • ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
  • make是用来编译的,它从Makefile中读取指令,然后编译。
  • make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

  • AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。如果你也写程序想使用AUTOMAKE和AUTOCONF,可以参考CNGNU.ORG上的相关文章。

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

        2、make ,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

        3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

     


      **************************************************************************************************************************************


    其实,Linux为我们想得比较周全,在Linux系统上的autoxxx系列脚本能协助我们轻松完成软件包的制作过程,下面请先看一下这一系列工具之间的关系和制作软件包的流程图:

     

    是不是被上图吓着了?有些烦琐,事实也确实是这个样子,不过没有办法,要想包袱正规,且易于移植,忍一下无所谓的(如果你真的觉得有所谓,就不要再看下去了,等我给你写的脚本吧!),哈哈!
    简单分析上图,可以发现实际的入口之有两个:source和Makefile.am,其他的只是执行一些命令而已。每个命令的输入输出在上图已经标得很清楚了,不再赘述。
    简单介绍一下每个文件的作用:

    • configure.in: 这个文件定义一些安装此软件系统需要具备的一些条件,如c编译器,某个特定库,诸如此类的东西。另外,他还定义一些编译时可能用到的环境变量和源码可能需要用到的一些宏。
    • Makefile.am: 这个文件定义了make程序需要在此目录所做的一些工作,比如说编译某个可执行程序,编译某个库文件啦!不过这个文件的撰写还是相对于Makefile要简便的,不信就接着往下看!
    • config.h.in:是config.h的模板了。
    • configure: 这个脚本可就功能强大了(BTW:体积也很大,动辄几万行),他会检查系统目前编译此软件的条件是否充分,并动态定义一些宏和环境变量,并最终生成Makefile。
    • Makefile.in: 是Makefile的蓝本。(是不是发现一个规律,autoxxx中的蓝本文件似乎都是以xxx.in命令的,不过奇怪的是为什么不以诸如xxx.template的形式命名呢?我是不是问题多了点儿,whatever,不关大要的,不管了,如果理解为输入文件也就容易理解了,希望不是曲解!嘿嘿!)
    • config.h: 这个文件比较重要了,一些关键的源码中可能用到的宏都有可能位于这里哦!
    • Makefile: 没什么好解释的,用过的都知道他是用来build源码的(还是罗嗦了)。
    原创粉丝点击