make、make all和make clean的使用方法

目录

1、理论

2、实践


刚接触Linux,认为直接make后就完成了编译,没想到编译出的结果存在很大问题,原来是make、make all和make clean的使用方法不对。

1、理论

makemake allmake clean 是在使用 make 构建系统时常见的命令。它们用于编译和管理项目中的代码。以下是每个命令的功能和区别:

1、make

  • 功能make 命令默认会查找当前目录下的 Makefilemakefile 文件,并执行该文件中的第一个目标(target)。如果第一个目标依赖于其他目标,make 会先构建这些依赖目标。

  • 使用场景:通常用于编译和链接项目中的代码。如果没有指定目标,make 会尝试编译和链接整个项目。

  • 示例

    • 假设 Makefile 的第一个目标是 all,则运行 make 会自动执行 make all

2、 make all

  • 功能make all 通常用于编译和构建整个项目。all 是一个常见的目标,一般在 Makefile 中明确定义,用于编译项目中的所有必要文件。

  • 使用场景:在想要编译项目中的所有组件时使用。这通常是项目构建的标准步骤。

  • 示例

    • Makefile 中可能包含以下内容:

all: prog1 prog2 prog1: ... prog2: ...

运行 make all 会依次构建 prog1prog2

3、make clean

  • 功能make clean 用于清理项目,通常会删除所有由之前的构建过程生成的文件,如对象文件(.o)、编译产物等。

  • 使用场景:在需要清理构建环境(例如,重新从头开始构建项目)时使用。

  • 示例

    • Makefile 中可能包含以下内容:

clean: rm -f *.o myProgram

运行 make clean 会删除所有对象文件和程序 myProgram

所以:

  • make:默认构建项目,根据 Makefile 中的第一个目标执行。
  • make all:明确构建整个项目,通常是 Makefile 中定义的标准目标。
  • make clean:清理项目,删除之前构建过程中生成的文件,准备一个干净的构建环境。

2、实践

让我们通过一个具体的例子来解释 makemake allmake clean 的功能和区别。假设我们有一个简单的C语言项目,包含两个源文件:main.chelper.c,以及一个头文件 helper.h。我们将创建一个 Makefile 来编译和管理这个项目。

目录结构如下:

cpp /项目目录 |-- main.c |-- helper.c |-- helper.h |-- Makefile

假设 main.c 内容如下:

```cpp

include

include "helper.h"

int main() { printf("Hello, World!\n"); helperFunction(); return 0; } ```

helper.c内容如下: 

```cpp

include

include "helper.h"

void helperFunction() { printf("Helper function called.\n"); } ```

helper.h内容如下: 

cpp void helperFunction();

一个简单的 Makefile 可能如下所示:

```cpp CC=gcc CFLAGS=-I.

默认目标

all: myProgram

构建最终程序

myProgram: main.o helper.o $(CC) -o myProgram main.o helper.o

编译 main.c

main.o: main.c $(CC) -c main.c $(CFLAGS)

编译 helper.c

helper.o: helper.c $(CC) -c helper.c $(CFLAGS)

清理构建文件

clean: rm -f *.o myProgram ```

所以如何使用make、make all和make clean呢?步骤如下:

  • 在包含这些文件的目录中打开终端。
  • 运行 makemake all。这将编译代码并生成 myProgram
  • 运行 ./myProgram 查看输出。
  • 完成后,运行 make clean 清理构建文件。

说明:

make 或 make all

  • 运行 makemake all 将编译 main.chelper.c,然后链接这些对象文件以创建可执行文件 myProgram
  • 这是因为 allMakefile 中定义的默认目标,而 make 默认执行第一个目标。

make clean

  • 运行 make clean 将删除所有编译生成的对象文件(.o 文件)和可执行文件 myProgram
  • 这用于清理项目,确保下次构建时从干净状态开始。
  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值