make和gcc之间有什么区别?

make和gcc之间有什么区别?,gcc,makefile,compiler-construction,Gcc,Makefile,Compiler Construction,最后一句话引起了我的注意 [F] 或C/C++开发人员和 对学习英语感兴趣的学生 使用C/C++而不是 Linux。这是因为 源代码的定义在 使用“make”实现GNU/Linux 指挥部 我一直使用gcc编译我的C/C++程序,而javac编译我的Java程序。我只使用make通过configure/make/make install将程序安装到我的计算机上 似乎您可以使用make命令编译所有程序 make和gcc之间有什么区别?gcc编译和/或链接单个文件。它支持多种语言,但不知道如何将多个

最后一句话引起了我的注意

[F] 或C/C++开发人员和 对学习英语感兴趣的学生 使用C/C++而不是 Linux。这是因为 源代码的定义在 使用“make”实现GNU/Linux 指挥部

我一直使用gcc编译我的C/C++程序,而javac编译我的Java程序。我只使用make通过configure/make/make install将程序安装到我的计算机上

似乎您可以使用make命令编译所有程序


make和gcc之间有什么区别?gcc编译和/或链接单个文件。它支持多种语言,但不知道如何将多个源文件组合成一个非平凡的、正在运行的程序——您通常需要至少两次调用gcc(编译和链接)来创建最简单的程序

GCC上的维基百科页面将其描述为“编译系统”:

GNU编译器集合(通常简称为GCC)是由支持各种编程语言的GNU项目生成的编译器系统

make是一种“构建工具”,它以特定的顺序调用编译器(可以是gcc)来编译多个源代码并将它们链接在一起。它还跟踪源代码编译产生的各种源文件和对象文件之间的依赖关系,并且只对自上次生成以来已更改的组件执行操作

是make的一种流行实现。GNUmake的描述如下:

Make是一种工具,用于控制从程序的源文件生成程序的可执行文件和其他非源文件

Make了解如何从一个名为makefile的文件构建程序,该文件列出了每个非源文件以及如何从其他文件计算它


Make是一种工具,用于通过完成最少的必要工作来构建各种系统组件之间存在依赖关系的任何复杂系统


如果你想知道make所有的东西都可以用来做什么,那就太好了。

好吧。。。gcc是一个编译器,make是一个帮助构建程序的工具。差别是巨大的。您永远不能纯粹使用make构建程序;它不是一个编译器。是什么使它引入了一个单独的“规则”文件,它描述了如何从源代码到完成的程序。然后它解释这个文件,找出需要编译的内容,并为您调用gcc。这对于包含数百或数千个源代码文件的大型项目非常有用,并且可以跟踪编译器选项、包含路径、,

经常用来编译大量的C或C++文件。

< P>你可以通过调用GCC或G++在你的Mag文件中编译make和C++程序来完成所有的编译和链接步骤,允许你用一个简单的命令完成所有这些步骤。它不是编译器的替代品。

make
使用当前目录中的
Makefile
将一组规则应用于其输入参数。Make还知道一些默认规则,因此即使在当前目录中找不到
Makefile
(或类似)文件,它也会执行这些规则。为
cpp
文件执行的规则在许多系统上都会调用
gcc


请注意,您不会使用输入文件名调用
make
,而是使用反映输出的规则名。因此,调用
make xyz
将努力执行规则
xyz
,默认情况下,该规则构建一个文件
xyz
(例如,基于源代码文件
xyz.cpp
gcc
是一个类似于
javac
的编译器。您给它源文件,它就会给您一个程序


make
是一个构建工具。它需要一个文件来描述如何根据文件之间的依赖关系在项目中构建文件,因此当您更改一个源文件时,您不必重新构建所有文件(就像使用构建脚本一样).
make
通常使用
gcc
来实际编译源文件。

'gcc'是编译器-将源代码实际转换为可执行文件的程序。您必须告诉它源代码在哪里,输出什么,以及库和选项等各种其他内容


“make”更像是一种用于编译程序的脚本语言。它是一种隐藏编译源代码的所有细节(所有必须传递给编译器的参数)的方法。您可以在Makefile中编写一次以上所有详细信息的脚本,这样就不必每次都为每个文件键入。它还可以做一些有趣的事情,例如只重新编译已更新的源文件,并处理依赖性(如果我重新编译此文件,则需要重新编译该文件)

gcc是一个C编译器:它接受一个C源文件,并以未链接的对象文件的形式或作为实际可执行程序创建机器代码,该程序已链接到所有对象模块和库

make对于控制项目的构建过程非常有用。典型的C程序由多个模块(.C)和头文件(.h)组成。更改任何内容后总是编译所有内容都会非常耗时,因此make设计为仅编译更改后需要重新编译的部分

它通过遵循程序员创建的规则来实现这一点。例如:

foo.o: foo.c foo.h
    cc -c foo.c
这个规则告诉make文件foo.o依赖于文件foo.c和foo.h,如果它们中的任何一个发生了变化,可以通过在第二行运行命令来构建它。(上面不是实际的语法:make希望命令以制表符缩进,这在这种编辑模式下是无法做到的。不过,想象一下它就在那里。)

make从一个通常称为Makefile的文件中读取其规则。由于这些文件(传统上)是手工编写的,make有很多功能
foo.o: foo.h
mycmd: main.o foo.o bar.o
    $(CC) $(LDFLAGS) -o mycmd main.o foo.o bar.o
foo.o: foo.h bar.h
bar.o: bar.h
clean:
    rm -f *.o core myapp
check: myapp
    ./myapp < test.input > test.output
    diff -u test.correct test.output