当我们有很多C源文件的时候,我们每次运行都要对其编译、链接……运行,这一步步的操作着实费时又费力,有不有更好的方法来为我们服务呢?我们知道ant可以用来构建java应用程序,通用我们也有make来为C服务。
类似于build.xml,在make读入的唯一的配置文件是Makefile,本文讲述Makefile的编写过程。首先然我们来看一个具体的Makefile文件是怎么构建的:
目录下有两个文件:
/home/l/g/tomotoboy/c >ls
factorial.c main.c
Makefile文件:
/home/l/g/tomotoboy/c >cat Makefile
main: main.o factorial.o
gcc -o main main.o factorial.o
main.o: main.c
gcc -c main.c
factorial.o: factorial.c
gcc -c factorial.c
使用make构建:
/home/l/g/tomotoboy/c >make main
gcc -c main.c
gcc -c factorial.c
gcc -o main main.o factorial.o
再次查看目录下文件的变化:
/home/l/g/tomotoboy/c >ls
Makefile factorial.c factorial.o main main.c main.o
运行我们的main程序:
/home/l/g/tomotoboy/c >main 9
Factorial of 9 is 362880.
现在我们来对Makefile文件做详细的解释,在一个Makefile中通常包含如下内容:
- 需要由make工具创建的目标体(target),通常是目标文件或可执行文件。
- 要创建每个目标体时所依赖的文件(dependency_file).
- 创建每个目标体时需要运行的命令(command).
它的格式为:
target: dependency_files
TAB command
第一行表示的是依赖关系.第二行是命令,注意规则第二行中的 TAB表示那里是一个 TAB 键。
比如我们上面的Makefile文件的第一行:
main: main.o factorial.o
表示我们的目标(target)main 的依赖文件是main.o、factorial.o。
当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令.就象我们的上面那个 Makefile 第二行所说的一样要执行:
gcc -o main main.o factorial.o
同理,可以解释上面那个Makefile的3到6行。
有了上面的Makefile文件,我们就可以make了。使用的格式为:
make target
这样make就会自读入Makefile文件(也可以是小写makefile)并执行对应的command语句,并会找到所有的依赖文件,如果找不到就会报错,这样你就应该把依赖文件补上。
分享到:
相关推荐
### Makefile文件制作 在软件开发过程中,编译工作占据着相当重要的位置。随着项目规模的不断增大,手工编译不仅耗时而且容易出错。为了解决这一问题,Makefile作为一种自动化构建工具应运而生。本篇将详细介绍如何...
【Makefile的制作方法】 Makefile是软件构建过程中的一个重要工具,它定义了一系列的规则来自动化编译、链接等步骤,使得开发过程中可以更高效地管理项目。在编写Makefile时,我们需要理解其基本概念和语法,以实现...
通过上述步骤,可以使用Autotools工具轻松生成makefile文件,并通过makefile实现项目的自动化构建和安装。这不仅简化了开发过程,还可以确保软件在不同系统上的兼容性和移植性。Autotools是Linux和Unix系统中常用的...
通过 Makefile 文件,开发者能够定义一系列规则来指示 make 工具如何编译源代码、处理文件依赖以及执行其他任务。它在软件开发中扮演着极其重要的角色,特别是在大型项目中,能够显著提高编译效率和项目管理能力。 ...
它可以生成一个名为`configure`的脚本,该脚本会检查用户的系统环境,并生成相应的Makefile文件。 - **Automake**:基于Autoconf生成的`configure`脚本,进一步简化Makefile的生成过程。它支持多种平台,可以自动...
Makefile是由一系列规则组成的文本文件,每个规则定义了一个或多个目标(通常是可执行文件或库),并指明了如何从源文件生成这些目标。规则的基本格式为: ``` target ... : prerequisites ... command ... ``` ...
Makefile是GNU Make的配置文件,用于描述项目中的目标文件和依赖关系,以及如何从源文件生成这些目标文件。在STM32项目中,Makefile通常包括以下部分: 1. **目标和源文件**:列出所有需要编译的目标文件(通常是`....
在`标题`和`描述`中提到的"makefile 制作放马"可能是指创建一个`Makefile`来管理名为`xfa_mibget.c`, `snmptrap.c`, `test.c`, `xfa_queue.c`等的源文件。 首先,我们来看`Makefile`的基本结构。它通常包含目标...
本文主要介绍如何通过一系列步骤生成一个符合特定平台的Makefile文件。 首先,我们从生成Makefile的起始点开始。在项目目录下,执行`autoscan`命令,它会根据源代码生成一个`configure.scan`文件。这个文件包含了...
`automake` 是一个广泛使用的开源工具,主要用于创建遵循 GNU 编译标准的 Makefile 文件。这个模板提供了使用 `automake` 创建自定义 Makefile 的基础结构,使开发者能够快速适应并应用于自己的项目。 `automake` ...
在这个“华农 Linux 实验八(2)”中,你被要求创建一个`Makefile`来管理一个包含五个文件的程序。下面将详细解释`Makefile`的基本概念、作用以及如何编写一个简单的`Makefile`。 1. **什么是`Makefile`**: `...
目标是你想要制作或更新的文件,依赖项是目标生成所需的前提条件,命令则是完成这些转换的步骤。例如: ``` target : dependencies command another_command ``` 每个命令行前要加一个tab键,这是Makefile识别...
3. **创建`Makefile.am`文件**:在项目根目录及子目录下创建`Makefile.am`文件,这些文件定义了编译规则、目标和依赖关系。 4. **创建必要的项目文件**:如`NEWS`、`README`、`ChangeLog`和`AUTHORS`,这些都是开源...
【标题】: "深入理解与实践Makefile制作过程" 在软件开发中,Makefile是一个至关重要的工具,它帮助我们自动化构建、编译和链接程序的过程。这篇详细的文章将带你走进Makefile的世界,揭示其制作过程及其核心原理。...
在进行大规模的图制作时,手动管理多个dot文件可能会变得繁琐。为了提高效率和便捷性,我们可以使用Makefile来自动化这个过程。"为Graphviz定制的Makefile"就是为了解决这个问题而设计的。 Makefile是Unix/Linux...
3. **依赖性**:Makefile会检查依赖文件的修改时间,如果依赖文件比目标文件新,就会执行相应的命令。 4. **隐含规则**:Makefile中有一些预定义的隐含规则,如编译C/C++源文件。通过`%.o: %.c`这样的模式规则,...
最近写编译器,生成makefile搞得我心情不好。 用cmake,要自己打那么多字,伐开心。 自己写makefile,更是在当年做shellbash的时候就经历过来...然后自己写了脚本,自动生成那套命令之外的文件,并替换相关内容等等。
### automake制作makefile #### 一、概述 在软件开发过程中,Makefile 是一种用于自动化构建过程的重要脚本文件,它可以自动管理依赖关系并控制编译过程。然而,手动编写 Makefile 可能非常繁琐且容易出错,尤其是...