刚接触Linux,认为直接make后就完成了编译,没想到编译出的结果存在很大问题,原来是make、make all和make clean的使用方法不对。
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
:清理项目,删除之前构建过程中生成的文件,准备一个干净的构建环境。让我们通过一个具体的例子来解释 make
、make all
和 make clean
的功能和区别。假设我们有一个简单的C语言项目,包含两个源文件:main.c
和 helper.c
,以及一个头文件 helper.h
。我们将创建一个 Makefile
来编译和管理这个项目。
目录结构如下:
/项目目录
|-- main.c
|-- helper.c
|-- helper.h
|-- Makefile
假设 main.c
内容如下:
#include <stdio.h>
#include "helper.h"
int main() {
printf("Hello, World!\n");
helperFunction();
return 0;
}
helper.c
内容如下:
#include <stdio.h>
#include "helper.h"
void helperFunction() {
printf("Helper function called.\n");
}
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
。