良许Linux教程网 干货合集 深入浅出Makefile:从基础到高级应用

深入浅出Makefile:从基础到高级应用

image-20240413220055562
image-20240413220055562

Makefile是一种编译控制文件,被广泛运用于项目的自动化构建。它规定了一系列的规则,以指导构建的各个步骤。借助Makefile,开发者能够轻松地管理大型项目的编译、链接以及清理等任务。本文将从Makefile的基础用法入手,逐步深入到更高级的应用,旨在为您呈现一个全面且详尽的Makefile使用手册。

Makefile的基本结构

一个最简单的Makefile包含规则,规则由目标(target)、依赖(dependencies)和命令(commands)三部分组成:

target: dependencies
    commands

命令前的Tab键是必须的。下面是一个简单的示例:

hello: hello.c
    gcc -o hello hello.c

变量的使用

在Makefile中声明变量可以使得我们的代码更加简洁。

CC=gcc
CFLAGS=-std=c99
LDFLAGS=
OBJ=main.o utils.o

app: $(OBJ)
    $(CC) -o app $(OBJ) $(LDFLAGS)

main.o: main.c
    $(CC) $(CFLAGS) -c main.c

utils.o: utils.c utils.h
    $(CC) $(CFLAGS) -c utils.c

通用规则和模式匹配

模式规则可以减少我们重复相同命令的工作量。

%.o: %.c
    $(CC) $(CFLAGS) -c $

$

自动化变量

Makefile提供了一系列自动化变量,它们在规则的命令中非常有用:

  • $@ 表示规则中的目标文件名;
  • $^ 表示所有的依赖文件列表;
  • $
  • $? 表示所有比目标新的依赖文件列表。

函数的使用

Makefile中内置了许多函数,用以执行字符串操作、文件操作等。

例如,获取源文件列表:

SRC=$(wildcard *.c)
OBJ=$(patsubst %.c,%.o,$(SRC))

控制Make的行为

  • make -B 强制重新编译所有目标;
  • make -n 显示将要执行的命令而不实际执行;
  • make -f 指定使用其他名称的Makefile文件;
  • make -j 允许并行执行(多核编译)。

高级用法 – 条件判断

Makefile也支持条件判断,这在不同环境需要执行不同命令时非常有用。

ifeq ($(OS),Windows_NT)
    RM=del /Q
else
    RM=rm -f
endif

clean:
    $(RM) *.o

使用变量和文件包含来组织Makefile

对于大型项目,组织多个Makefile是一种好方法。

# 在子Makefile中
include config.mk

自定义函数

通过定义可以重用的函数,你可以使你的Makefile变得更加强大和灵活。

define run-cc
$(CC) $(CFLAGS) -o $@ $^
endef

app: $(OBJ)
    $(call run-cc)

处理多目标

定义一个规则来批量处理多个文件。

FILES := file1 file2 file3

all: $(FILES)

$(FILES):
    touch $@

伪目标的使用

伪目标不代表实际的文件,它只是一个动作的名称。

.PHONY: clean

clean:
    rm -f *.o app

调试Makefile

你可以使用make –debug或添加注释来帮助调试Makefile。

app: main.o utils.o
    # 这是一个链接的命令
    $(CC) -o app main.o utils.o

结语

Makefile是构建自动化的强大工具,既可以简化小型项目的构建流程,也能够灵活管理大型应用程序的复杂构建系统。通过本文的详细论述和丰富示例,您应该能够基本掌握Makefile的各项技能,并在实际项目中加以应用。

希望以上内容对你深入理解和使用Makefile有所帮助。记住,“实践出真知”——编写你自己的Makefile并尝试使用这些特性是最好的学习方式。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部