Makefile结构与其常见书写格式

简介: Makefile结构与其常见书写格式

Makefile结构与其常见书写格式

Makefile 是一种用于自动化构建和管理项目的工具,其语法和结构可以有很多不同的风格,但一般而言,它包括变量、规则和目标等基本元素。以下是一个具有常见书写格式的Makefile代码示例,以及对其结构的详细说明:

# 定义变量
CC = gcc
CFLAGS = -Wall -O2
SRCS = main.c foo.c bar.c
OBJS = $(SRCS:.c=.o)
LIBS = -lm
# 默认目标
all: my_program
# 生成可执行文件
my_program: $(OBJS)
    $(CC) $^ $(LIBS) -o $@
# 生成目标文件
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
# 清理操作
clean:
    rm -f my_program $(OBJS)



 1. 变量定义:
在上述示例中,使用了变量来存储编译器 (CC)、编译选项 (CFLAGS)、源文件列表 (SRCS)、目标文件列表 (OBJS) 和链接库 (LIBS)。这样的变量定义使得代码更加模块化,易于维护和修改。
 2. 默认目标:
Makefile 一般会指定一个默认目标,当用户执行 make 命令时,会执行该目标下定义的规则。在这个例子中,默认目标是 all,它依赖于 my_program 目标。
 3. 生成可执行文件规则:
my_program 目标通过依赖于目标文件列表 ($(OBJS)),使用链接命令生成最终的可执行文件。这个规则展示了变量引用、命令的执行和目标的定义。
 4. 生成目标文件规则:
%.o: %.c 规则定义了生成目标文件的方式。通过自动变量 $< 获取依赖文件列表中的第一个文件(源文件),并使用编译器命令生成目标文件。
 5. 清理操作:
为了方便项目的维护,一般会包含一个 clean 目标,用于清理生成的可执行文件和目标文件。这样的规则有助于确保在重新构建项目时始终从干净的状态开始。
 这个示例涵盖了一个基本的Makefile结构,其中包括了变量的定义、目标的规则以及清理操作。这种结构使得Makefile更加模块化、易读且易于维护,同时提高了代码的可重用性。

相关文章
|
8月前
|
C++ 开发者
2C++的程序的构成和书写形式
2C++的程序的构成和书写形式
52 2
|
8月前
|
算法 开发者
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
211 0
|
8月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
|
7月前
|
Windows
VBA的直接或间接调用的语法格式
VBA|过程或方法内部的直接或间接调用与相对怪异的语法格式
|
8月前
|
算法 开发者
【CMake 设计命名思路】自定义命令命名规范与风格指南
【CMake 设计命名思路】自定义命令命名规范与风格指南
110 0
|
存储 编解码 Python
ENVI_IDL:对于书写和创建GEOTIFF结构体?
ENVI_IDL:对于书写和创建GEOTIFF结构体?
166 0
LaTex源文件的基本结构
LaTex源文件的基本结构
147 0
LaTex源文件的基本结构
|
C语言 C++
【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)
【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)
179 0
|
Android开发 Python
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
360 0
|
消息中间件 人工智能 算法
C语言程序书写规范
C语言程序书写规范 我做C语言底层开发,积累了一些代码书写的经验供大家参考: 1.C语言书写规范 1.1符号命名规则
396 0