目录
刚接触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 来编译和管理这个项目。
目录结构如下:
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呢?步骤如下:
- 在包含这些文件的目录中打开终端。
- 运行
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。 - 这用于清理项目,确保下次构建时从干净状态开始。
1050

被折叠的 条评论
为什么被折叠?



