zoukankan      html  css  js  c++  java
  • 深入讲解GCC和Make的区别(有涉及makefile文件哟!!!)

    gcc是编译器 而make不是 make是依赖于Makefile来编译多个源文件的工具 在Makefile里同样是用gcc(或者别的编译器)来编译程序.

    gcc是编译一个文件,make是编译多个源文件的工程文件的工具。 make是一个命令工具,是一个解释makefile中指令的命令工具。

    make就是一个gcc/g++的调度器,通过读入一个文件(默认文件名为Makefile或者makefile),执行一组以gcc/g++为主的shell命令序列。输入文件主要用来记录文件之间的依赖关系和命令执行顺序。

    gcc是编译工具; make是定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译; 也就是说make是调用gcc的。

    要是好好分析过一个makefile文件就不会这么问了。

    刚接触linux编程,很多概论都比较模糊,今天突然用到makefile文件,想到了make与gcc的关系。于是查阅了一些资料,在此做一个小结:

    1.gcc是编译一个文件,make是编译多个源文件的工程文件的工具。

    2.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

    3.make就是按照makefile脚本对整个项目的各个文件进行分别编译和链接,makefile基本上就是"目标"(target),"关连"(dependencies)   和"动作"三者所组成的脚本。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。make除了可以做到编译和连结,也可以把如何产生文档(如manual  page,   info档及   dvi 档)   ,以及打包压缩都完成。

    4.make 可以说是一个批处理程序,它可以自动编译多个文件。当然写好的脚本是前提。MAKE是运用GCC去编译文件的。

    5.Makefile文件作为一种描述文档一般需要包含以下内容:

    ◆ 宏定义

    ◆ 源文件之间的相互依赖关系

    ◆ 可执行的命令

    Makefile中允许使用简单的宏指代源文件及其相关编译信息,在Linux中也称宏为变量。在引用宏时只需在变量前加$符号,但值得注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号()。

    下面都是有效的宏引用:

    $(CFLAGS)

    $Z

    $(Z)

    其中最后两个引用是完全一致的。

    个人总结:

    gcc就是一个纯编译器

    而make更牛逼些 包括了gcc  

    只有把makefile解决 一切ok

    以上部分来源于网络,如果你对gcc和make理解要求不深的话上面的话基本可以打发你了,本人在Linux上小玩了两把gcc和make对这两个命令感觉深有体会,具体如下:

    gcc就是我们熟悉的C语言编译程序,这个主要是GNU项目下产生的一个开源程序,说白了,就是告诉系统,你下面要对C的文件干嘛了,主要有两种:编译、链接。例:gcc -c hello.c 、gcc -o hello hello.o,但是我们基本一次搞定:gcc hello.c

    make其实也是个程序,但是这个程序和gcc不是一个意思,他主要的工作是引导,也就是说,这个程序干什么,你是可以“要求的”,牛逼吧,所以就有了makefile这个文件,因为当你make的时候,他得首先找到makefile这个文件,才知道他要干嘛!!!而巧的是makefile这个文件里面基本写的都是gcc的命令,所以当你使用make的时候就会发现怎么和gcc最后的结果是一样的呀!!而我们一般使用make的时候,往往很多人不是自己写的makefile这个文件,导致很多人对gcc和make稀里糊涂的,以下我贴出自己写的一个makefile文件以供参考:

    main: main.o haha.o sin_value.o cos_value.o

                 gcc -o main main.o haha.o sin_value.o cos_value.o

    clean:

                 rm -f main *.o

    #gcc和rm前面是‘tab’

    #这个makefile文件是有两个作用的一个是建立一个是删除文件分别命令是:make main和make rm,当然如果你使用make那系统默认是make #main这个了~~~~

     转自:https://cloud.tencent.com/developer/article/1343055

     
  • 相关阅读:
    HDU
    P2458 [SDOI2006]保安站岗[树形dp]
    POJ 2155 Matrix[树状数组+差分]
    P1281 书的复制[二分]
    【清北学堂】广州OI学习游记
    P1736 创意吃鱼法[二维dp]
    P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
    P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
    P1273 有线电视网[分组背包+树形dp]
    windows下安装MySQL
  • 原文地址:https://www.cnblogs.com/javalinux/p/14467437.html
Copyright © 2011-2022 走看看