Linux Makefile由浅入深剖析

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

Linux Makefile由浅入深剖析

Makefile是Linux系统中用于自动化构建项目的一种脚本文件,它通过定义一系列规则来指导编译器怎样编译源代码文件,生成可执行文件。本文将深入剖析Linux Makefile的各个方面,帮助读者从入门到精通。

1. Makefile的基本结构

Makefile的基本结构如下:

# 注释

# 变量定义

VARIABLE := value

# 目标文件定义

TARGET: DEPENDENCIES

COMMAND

# 其他目标文件定义

其中,注释、变量定义、目标文件定义和命令是Makefile的核心部分。

1.1 注释

Makefile中的注释以井号(#)开头,用于说明代码的功能或作用。例如:

# 编译规则

1.2 变量定义

变量用于存储值,在Makefile中可以定义各种变量,如:

# 变量定义

CC := gcc

CFLAGS := -Wall -g

变量定义后,可以使用$(VARIABLE)的形式来引用变量的值。

1.3 目标文件定义

目标文件定义了Makefile中的目标,如可执行文件、库文件等。目标文件以冒号(:)开头,后面跟着依赖性文件和命令。例如:

# 目标文件定义

all: main.o util.o

gcc main.o util.o -o program

在这个例子中,目标文件名为“all”,依赖性文件为“main.o”和“util.o”,命令为将这两个目标文件编译成可执行文件“program”。

1.4 命令

命令用于指定在目标文件生成过程中需要执行的命令。例如,上面的例子中的命令是使用gcc编译器将main.o和util.o编译成可执行文件program。

2. Makefile的规则

Makefile中的规则定义了目标文件与依赖性文件之间的关系,以及怎样生成目标文件。规则的基本格式如下:

TARGET: DEPENDENCIES

COMMAND

其中,TARGET为目标文件,DEPENDENCIES为依赖性文件,COMMAND为生成目标文件时需要执行的命令。

2.1 自动变量

Makefile中提供了一些自动变量,用于简化规则编写。以下是一些常用的自动变量:

自动变量说明
$@目标文件名
$^所有依赖性文件名
$<第一个依赖性文件名
$?比目标文件新或修改过的依赖性文件名

例如,使用自动变量简化上面的规则:

all: main.o util.o

gcc $^ -o $@

2.2 通配符

Makefile中可以使用通配符来匹配多个文件。常用的通配符有*和?。

# 匹配所有.c文件

all: $(wildcard *.c)

gcc $(wildcard *.c) -o program

3. Makefile的高级特性

3.1 文件搜索

Makefile可以使用vpath变量来指定搜索依赖性文件的目录。例如:

vpath %.c src:include

这个例子中,Makefile会在src和include目录下搜索.c文件作为依赖性文件。

3.2 条件判断

Makefile可以使用if语句进行条件判断。例如:

ifeq ($(CC),gcc)

CFLAGS += -Wall -g

else

CFLAGS += -O2

endif

3.3 循环

Makefile可以使用for循环遍历文件列表。例如:

for i in $(wildcard *.c)

do

$(CC) $(CFLAGS) -c $i -o $(@:.c=.o)


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

文章标签: Linux


热门