学习笔记——Makefile
2026/6/12 12:35:29 网站建设 项目流程

基本概念

Makefile 是工程管理工具,用于编译多个源文件(可能在不同目录下),可以添加编译选项。

基本语法规则

makefile

目标: 依赖 [TAB] 规则命令

版本演进

版本1:直接编译

makefile

a.out: main.c func.c gcc main.c func.c -o a.out

版本2:使用内置变量

makefile

a.out: main.c func.c gcc $^ -o $@ # 不需要依赖文件 clean: rm a.out

内置变量说明:

  • $^:在本条规则中,表示所有的依赖文件

  • $@:在本条规则中,表示目标文件

执行示例:

# 第一次编译 linux@ubuntu:~/20251103/os_app/Make$ make # 源文件未被修改时再次编译 linux@ubuntu:~/20251103/os_app/Make$ make make: 'a.out' is up to date. # 清理生成的文件 make clean

说明:当产生目标文件的相关源文件没有被修改(没有被更新)时,Make 不会重新编译。

版本3:使用自定义变量

makefile

# 定义变量 SRC = main.c SRC += func.c # 追加变量 APP = a.out FLAG = -g # 编译选项,如调试信息 $(APP): $(SRC) gcc $^ -o $@ $(FLAG) clean: rm $(APP)

变量说明:

  • SRC:源文件列表

  • APP:生成的可执行文件名

  • FLAG:编译选项(如-g用于调试)

相关源文件

main.c

#include <stdio.h> #include "func.h" int main() { int a = 10; int b = 20; int c = add(a, b); printf("add is %d\n", c); c = sub(a, b); printf("sub is %d\n", c); }

func.c

int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; }

func.h

#ifndef __FUNC_H_ #define __FUNC_H_ int add(int a, int b); int sub(int a, int b); #endif

注意事项

  1. Makefile 文件名可以是makefileMakefile(建议使用后者)

  2. 命令前的缩进必须是 Tab 键,不能是空格

  3. 当执行make命令后,会在当前目录下查找 Makefile 文件

  4. make clean用于清理生成的文件

  5. Make 会检查文件的更新时间,如果依赖文件比目标文件新,才会重新编译

完整示例 Makefile

makefile

# 变量定义 SRC = main.c func.c APP = a.out FLAG = -g # 默认目标 $(APP): $(SRC) gcc $^ -o $@ $(FLAG) # 清理规则 clean: rm -f $(APP)

这个 Makefile 实现了:

  1. 一键编译所有源文件生成可执行文件

  2. 支持调试选项

  3. 提供清理功能

  4. 自动判断是否需要重新编译

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询