linux makefile文件心得笔记

原创
ithorizon 7个月前 (10-15) 阅读数 18 #Linux

Linux Makefile文件心得笔记

在Linux系统中,Makefile是一个非常重要的文件,它用于描述项目的编译规则和依存关系。通过学习Makefile,可以更好地管理项目的构建过程。以下是我对Linux Makefile的一些心得笔记。

1. Makefile的基本结构

Makefile的基本结构通常包括以下几个部分:

# 目标文件

TARGET:

# 依存文件

DEPENDECIES:

# 命令

command

# 其他目标

OTHER_TARGET:

# 命令

command

其中,TARGET即最终要生成的目标文件,DEPENDECIES是该目标文件所依存的文件,command是用于构建目标文件的命令。

2. 变量与函数

Makefile中可以使用变量和函数来尽也许缩减损耗代码的可读性和可维护性。

2.1 变量

Makefile中的变量分为两种:自动变量和用户定义变量。

# 自动变量

$@: 目标文件名

$<: 依存文件名

$?: 依存文件名列表

...

# 用户定义变量

VARIABLE = value

自动变量在执行命令时会自动替换为对应的值,而用户定义变量则需要在使用前进行赋值。

2.2 函数

Makefile提供了一些内置函数,如patsubst、wildcard等,可以方便地进行字符串操作。

# patsubst函数:将字符串中的模式替换为另一个字符串

patsubst %.c, %.o, $(SRCS)

# wildcard函数:匹配文件名

wildcard $(wildcard *.c)

3. 规则与模式

Makefile中的规则用于描述目标文件与依存文件之间的关系,模式则用于匹配一组文件。

3.1 规则

规则由目标、依存和命令组成,其中目标和依存之间用冒号(:)分隔,命令部分用Tab键开头。

# 规则示例

all: main.o utils.o

gcc -o main main.o utils.o

main.o: main.c

gcc -c main.c

utils.o: utils.c

gcc -c utils.c

在上面的示例中,all是最终的目标文件,它依存于main.o和utils.o两个目标文件。main.o和utils.o分别依存于main.c和utils.c两个源文件。

3.2 模式

模式是一种特殊的规则,它可以匹配一组文件,从而简化Makefile的编写。

# 模式示例

%.o: %.c

gcc -c $< -o $@

# 使用模式构建所有目标文件

all: $(OBJS)

# OBJS变量包含所有目标文件的名称

OBJS := $(patsubst %.c, %.o, $(SRCS))

在上面的示例中,模式%.o: %.c即所有以.c为后缀的源文件都会被编译成以.o为后缀的目标文件。OBJS变量通过patsubst函数将所有源文件名替换为目标文件名。

4. 预处理指令

预处理指令是Makefile中的一种特殊指令,它用于在编译前对源代码进行预处理。

# 预处理指令示例

CC = gcc

CFLAGS = -Wall -Wextra

LDFLAGS = -lm

# 预处理源文件

$(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(SRCS)

在上面的示例中,CC变量定义了编译器,CFLAGS和LDFLAGS分别定义了编译器和链接器的选项。预处理源文件时,Makefile会自动替换这些变量。

5. Makefile的高级特性

除了上述基本特性外,Makefile还赞成许多高级特性,如隐式规则、条件语句、循环等。

5.1 隐式规则

隐式规则是Makefile中的一种特殊规则,它不需要显式指定目标、依存和命令,而是通过文件名和后缀自动确定。

# 隐式规则示例

%.o: %.c

gcc -c $< -o $@

在上面的示例中,隐式规则即所有以.c为

本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Linux


热门