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 中定义的规则来进行构建的。这种自动化的构建过程可以大大提高开发效率,并确保项目的一致性和可重复性。

相关文章
|
Ubuntu Linux API
libusb简介及在Linux中安装libusb
最近做了关于在X86环境下通过FT232H芯片实现的USB转SPI的相关驱动,接触到了libusb。libusb是一个开源的用C实现的,应用程序与用户的USB设备进行通信的库。它是可移植的,对外使用统一的API,支持Windows、macOS、Linux、Android。它是用户模式(user-mode),应用程序与USB设备通信不需要高权限,但是在Android下好像有些接口需要root权限才能调用成功。它支持所有版本的USB协议。它的License是LGPL,源码地址在https://github.com/libusb/libusb,最新发布版本为1.0.23。
libusb简介及在Linux中安装libusb
|
12月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
273 60
|
Ubuntu Shell 芯片
详细讲解移植u-boot.2022.10版本移植到开发板基本方法
详细讲解移植u-boot.2022.10版本移植到开发板基本方法
890 0
|
JavaScript 前端开发 开发者
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
394 1
socket编程之 accept函数的理解
在进入我们的正题之前,再来复习一波编写服务器的函数流程吧
818 0
|
JSON 测试技术 API
Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)
Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)
656 0
|
SQL 消息中间件 存储
案例:Flume消费Kafka数据保存Hive
案例:Flume消费Kafka数据保存Hive
367 0
|
人工智能 达摩院 Linux
如何使用ModelScope魔搭开源代码训练一款语音合成模型
如何使用ModelScope魔搭开源代码训练一款语音合成模型
1489 0
|
编解码
USB摄像头描述符参数获取和来源分析(上)
USB摄像头描述符参数获取和来源分析
355 0