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