# Makefile_Learn **Repository Path**: wang-jialll/makefile_-learn ## Basic Information - **Project Name**: Makefile_Learn - **Description**: 学习makefile - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-24 - **Last Updated**: 2023-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Makefile学习 ## 初步学习 1. 创建文件名为makefile 2. #:注释 第一层:显示规则 目标文件:依赖文件 [TAB]指令 过程分为 -E预处理:把.h .c展开形成一个文件。宏定义直接替换头文件、库文件 ```makefile gcc -E hello.c -o hello.i ``` -S 汇编: .i生成一个汇编代码文件 .s ```makefile gcc -S hello.i -o hello.S ``` -c 编译: .S生成一个 .o .obj ```makefile gcc -c hello.S -o hello.o ``` -o 链接: .o 链接 .exe windows .elf ```makefile gcc hello.o -o hello ``` ### 伪目标 ```makefile .PHONY: clear: rm -rf hello.o hello.S hello.i hello ``` ### 示例代码 ```makefile hello:hello.o gcc hello.o -o hello hello.o:hello.S gcc -c hello.S -o hello.o hello.S:hello.i gcc -S hello.i -o hello.S hello.i:hello.c gcc -E hello.c -o hello.i .PHONY: #伪装目标 clear: rm -rf hello.o hello.S hello.i hello ``` ## 进阶一:变量 变量=(替换) += (追加) :=(恒等于) 初步增加了拓展性 ### 示例代码 ```makefile TAR = hello OBJ = hello.o CC := gcc $(TAR):$(OBJ) $(CC) $(OBJ) -o $(TAR) hello.o:hello.c $(CC) -c hello.c -o hello.o .PHONY: #伪装目标 clear: rm -rf $(OBJ)$(TAR) ``` ## 进阶二:隐含规则 `%.c %.o任意.c.o文件 *.c *.o 所有的.c .o文件` ### 示例代码 ```makefile TAR = hello OBJ = hello.o CC := gcc $(TAR):$(OBJ) $(CC) $(OBJ) -o $(TAR) %.o:%.c $(CC) -c %.c -o %.o .PHONY: #伪装目标 clear: rm -rf $(OBJ)$(TAR) ``` ## 进阶三:通配符 `$^`:所有的依赖文件 `$@`:所有的目标文件 `$<`:所有的依赖文件的第一个文件 ### 示例代码 ```makefile TAR = hello OBJ = hello.o CC := gcc RMRF := rm -rf $(TAR):$(OBJ) $(CC) $^ -o $@ %.o:%.c $(CC) -c -o $@ .PHONY: #伪装目标 clear: $(RMRF) $(OBJ)$(TAR) ```