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

电子说

1.3w人已加入

描述

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

1理论

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

1、make

功能

make 命令默认会查找当前目录下的 Makefile 或 makefile 文件,并执行该文件中的第一个目标(target)。

如果第一个目标依赖于其他目标,make 会先构建这些依赖目标。

使用场景

通常用于编译和链接项目中的代码。

如果没有指定目标,make 会尝试编译和链接整个项目。

示例

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

2、 make all

功能

make all 通常用于编译和构建整个项目。

all 是一个常见的目标,一般在 Makefile 中明确定义,用于编译项目中的所有必要文件。

使用场景

在想要编译项目中的所有组件时使用。

这通常是项目构建的标准步骤。

示例

Makefile 中可能包含以下内容:

 

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

 

运行 make all 会依次构建 prog1 和 prog2。

3、make clean 

功能

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

使用场景

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

示例

Makefile 中可能包含以下内容:

 

clean:
    rm -f *.o myProgram

 

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

所以:

make:默认构建项目,根据 Makefile 中的第一个目标执行。

make all:明确构建整个项目,通常是 Makefile 中定义的标准目标。

make clean:清理项目,删除之前构建过程中生成的文件,准备一个干净的构建环境。

2实践

让我们通过一个具体的例子来解释 make、make all 和 make clean 的功能和区别。

假设我们有一个简单的C语言项目,包含两个源文件:main.c 和 helper.c,以及一个头文件 helper.h。我们将创建一个 Makefile 来编译和管理这个项目。

目录结构如下:

 

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

 

假设 main.c 内容如下:

 

#include
#include "helper.h"


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

 

helper.c内容如下:

 

#include
#include "helper.h"


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

 

helper.h内容如下: 

 

void helperFunction();

 

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

 

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呢?步骤如下:

在包含这些文件的目录中打开终端。

运行 make 或 make all。

这将编译代码并生成 myProgram。

运行 ./myProgram 查看输出。

完成后,运行 make clean 清理构建文件。

说明:

make 或 make all

运行 make 或 make all 将编译 main.c 和 helper.c,然后链接这些对象文件以创建可执行文件 myProgram。

这是因为 all 是 Makefile 中定义的默认目标,而 make 默认执行第一个目标。

make clean

运行 make clean 将删除所有编译生成的对象文件(.o 文件)和可执行文件 myProgram。

这用于清理项目,确保下次构建时从干净状态开始。

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分