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