我们为什么要使用;制造;命令时";cc ex1.c-o ex1“;编译用“";exe1.c“;文件

我们为什么要使用;制造;命令时";cc ex1.c-o ex1“;编译用“";exe1.c“;文件,c,linux,ubuntu,makefile,compilation,C,Linux,Ubuntu,Makefile,Compilation,我在Linux中学习C编程时遇到了这行代码 $ make ex1 cc ex1.c -o ex1 我的问题是为什么我们必须使用makeex1?cc命令不是在构建程序和其他必要的文件吗。对于一个文件项目,它们的结果大致相同。然而,现实世界中的项目往往有数十个、数百个或数千个文件,并构建数十个或数百个库和可执行文件,可能具有不同的设置等。在不将编译命令存储在某个位置的情况下管理所有这些都是不可能的,而Makefile是非常有用的“某处” make的另一个重要特性是,它对文件进行时间戳检查,并且只

我在Linux中学习C编程时遇到了这行代码

$ make ex1

cc ex1.c -o ex1

我的问题是为什么我们必须使用
makeex1
cc
命令不是在构建程序和其他必要的文件吗。

对于一个文件项目,它们的结果大致相同。然而,现实世界中的项目往往有数十个、数百个或数千个文件,并构建数十个或数百个库和可执行文件,可能具有不同的设置等。在不将编译命令存储在某个位置的情况下管理所有这些都是不可能的,而Makefile是非常有用的“某处”


make的另一个重要特性是,它对文件进行时间戳检查,并且只重新运行输出过时的编译/链接命令,即至少有一个输入比输出更新。如果没有这样的检查,当您更改某些内容时,您必须手动记住要重新编译的文件(尤其是当更改的文件是头文件时),或者总是重新编译所有内容,以数量级增加构建时间。

除了一小部分非常简单的问题,几乎所有现实生活中的C程序都将由多个模块、头文件、外部库构建,有时跨越多个文件夹。在某些情况下,可以使用不同的工具(例如代码生成器)链接其他代码

对于这些情况,单个“cc”命令将不起作用。下一个解决方案是使用构建脚本自动化构建。然而,这可能需要花费大量的时间来构建,并且几乎不可能进行维护

对于构建“C”程序,Make在一个简单的shell构建脚本的基础上提供了许多好处。这是我个人的“前三名”

  • 增量构建-当修改代码文件时,make可以识别代码,并执行最小的构建指令集,而不是重建整个代码。这可以大大提高开发人员的效率
  • 基于规则的生成-生成使用规则生成目标。一旦定义了一条规则(一条显而易见的规则:将“.c”文件编译为“.o”),它们就可以在所有文件上一致地应用
  • 提供完整构建过程的设置—包括代码安装、清理、打包、测试等。非常重要的是make可以将(几乎)任何Unix工具集成到构建过程—代码生成等

不用说,还有其他构建工具可以提供额外的/替代的好处。CMake、gradle、SCons等等。

请指出我在编程方面的不足之处。我从我的课程书中学习过,那里没有提到这些东西,我在哪里可以获得关于这些东西的详细知识。你不需要使用
make
来构建你的程序。这是一种方便。对于您演示的简单的单源程序,方便性很小,但对于大多数真实世界的程序和库,方便性是引人注目的。