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更加模块化、易读且易于维护,同时提高了代码的可重用性。

相关文章
|
6月前
|
C++ 开发者
2C++的程序的构成和书写形式
2C++的程序的构成和书写形式
43 2
|
6月前
|
算法 开发者
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
153 0
|
6月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
|
6月前
|
算法 开发者
【CMake 设计命名思路】自定义命令命名规范与风格指南
【CMake 设计命名思路】自定义命令命名规范与风格指南
94 0
|
6月前
Makefile中.PHONY的含义
Makefile中.PHONY的含义
907 0
|
6月前
Makefile中.SUFFIXES的含义
Makefile中.SUFFIXES的含义
160 0
|
6月前
|
自然语言处理 IDE Go
高效Go编程之格式化+代码注释+命名+分号+控制结构
【2月更文挑战第6天】高效Go编程之格式化+代码注释+命名+分号+控制结构
71 0
通用Makefile的使用及解析 2
通用Makefile的使用及解析
169 0
LaTex源文件的基本结构
LaTex源文件的基本结构
138 0
LaTex源文件的基本结构
|
芯片 异构计算
Verilog语法之测试文件
要测试我们设计的模块功能是否正常,最直接的办法就是烧写到FPGA芯片中进行验证,但是这种方式往往结果并不直观,且出现问题后也不容易定位。为提高工作效率,我们可通过电脑仿真的方式进行功能验证,待仿真通过后,再烧写到FPGA中,这样可以快速排除电路中存在的绝大多数bug。在电脑上进行仿真,除了我们设计的功能模块之外,还需要另一模块——testbench,用于产生被测模块所需的激励信号。由于testbench只是用于电脑端的仿真,而不需要最终综合成电路,因此其写法更加灵活,可以使用verilog语法中的一些不可综合的语句,如initial、#、$display、$readmemb、forever等。
256 0