Makefile中maake命令的执行

简介: Makefile中maake命令的执行

Makefile中make命令的执行

执行 Makefile 的关键命令是 make。当你在命令行中输入 make 后,系统会按照 Makefile 中定义的规则来执行相应的操作。下面是一个示例 Makefile 及其执行过程的说明:

CC = gcc
CFLAGS = -Wall -O2
SRC_DIR = src
BUILD_DIR = build
TARGET = my_program
$(BUILD_DIR)/$(TARGET): $(BUILD_DIR)/main.o $(BUILD_DIR)/foo.o $(BUILD_DIR)/bar.o
    $(CC) $^ -o $@
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@
all: $(BUILD_DIR)/$(TARGET)
clean:
    rm -rf $(BUILD_DIR)/*.o $(BUILD_DIR)/$(TARGET)



执行过程示例:

1.开始执行:
当你在命令行中输入 make 后,系统会在当前目录下寻找名为 Makefile 或 makefile 的文件,并开始执行。
2.检查依赖关系:
首先,make 会检查目标文件 $(BUILD_DIR)/$(TARGET) 是否存在以及其依赖关系是否满足。在这个示例中,目标文件依赖于 main.o、foo.o 和 bar.o 这三个文件。
3.检查依赖文件是否存在:
make 会检查这些依赖文件是否存在或者是否需要重新构建。如果依赖文件不存在,或者依赖文件的时间戳比目标文件新,那么就需要重新构建这些依赖文件。
4.执行规则:
如果需要重新构建依赖文件,make 将会按照规则执行。在这个示例中,make 会先生成 main.o、foo.o 和 bar.o 这三个目标文件,然后再链接它们生成最终的可执行文件 my_program。
5.生成目标文件:
make 根据规则,使用编译器将源文件编译成目标文件。例如,main.o 的生成命令是 gcc -Wall -O2 -c src/main.c -o build/main.o。类似地,foo.o 和 bar.o 也会分别生成。
6.链接目标文件:
所有的目标文件都生成后,make 将使用链接器将这些目标文件链接成最终的可执行文件。在这个示例中,链接命令是 gcc build/main.o build/foo.o build/bar.o -o build/my_program。
7.完成构建:
一旦链接完成,make 就会输出构建成功的消息,说明最终的目标文件已经生成。
8.清理操作:
如果执行 make clean,则会删除所有的目标文件和可执行文件,以便下一次构建时从干净的状态开始。

 通过以上示例,你可以了解 make 命令在执行过程中是如何根据 Makefile 中定义的规则来进行构建的。这种自动化的构建过程可以大大提高开发效率,并确保项目的一致性和可重复性。

相关文章
|
7月前
|
存储 缓存 编译器
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
145 0
|
7月前
|
Shell
Makefile函数的使用(1)
Makefile函数的使用(1)
40 0
|
7月前
|
安全 Linux Apache
40、命令执行介绍
40、命令执行介绍
39 0
|
7月前
|
Shell Go
go 执行shell脚本 在指定目录下执行指定脚本
go 执行shell脚本 在指定目录下执行指定脚本
82 5
|
7月前
|
编译器 C语言 Windows
编译&执行C程序
编译&执行C程序。
55 2
|
6月前
|
C语言
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
|
7月前
|
C语言
C的编译命令 | .o .s .exe .c文件
C的编译命令 | .o .s .exe .c文件
28 0
|
C++
执行 mysqld --install 报错:由于找不到 MSVCP120.dII, 无法继续执行代码?
执行 mysqld --install 报错:由于找不到 MSVCP120.dII, 无法继续执行代码?
140 0
执行 mysqld --install 报错:由于找不到 MSVCP120.dII, 无法继续执行代码?
|
编译器 C语言 C++
Makefile中常见的gcc编译参数
Makefile中常见的gcc编译参数
412 0
解决办法:configure后,没有更新Makefile
解决办法:configure后,没有更新Makefile
197 0