0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全面而详细的Makefile使用手册

Linux爱好者 来源:Linux爱好者 2024-01-24 12:35 次阅读

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并尝试使用这些特性是最好的学习方式。

审核编辑:发货

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112
  • Makefile
    +关注

    关注

    1

    文章

    121

    浏览量

    19094

原文标题:深入浅出 Makefile:从基础到高级应用

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    freebsd使用手册pdf

    freebsd使用手册pdfThe FreeBSD Documentation Project FreeBSD 中文计划,为PDF文档格式。FREEBSD使用手册分成了三个逻辑清晰的部分。第一部
    发表于 10-21 17:22

    EMC分析使用手册

    EMC分析使用手册 [/hide]
    发表于 10-10 16:33

    USB设计及使用手册

    USB设计及使用手册  [hide]USB使用手册.rar[/hide][此贴子已经被作者于2009-11-19 11:52:30编辑过]
    发表于 11-19 11:51

    DAvE_使用手册_8 bit

    DAvE_使用手册_8 bit
    发表于 08-20 09:13

    fpga使用手册

    fpga使用手册,菜鸟必备get
    发表于 06-09 22:20

    CANopen使用手册

    CANopen使用手册
    发表于 09-20 16:01

    1602液晶使用手册

    液晶1602的使用手册附有应用的例子
    发表于 10-30 17:31

    Cadence使用手册经典

    Cadence使用手册经典
    发表于 01-15 17:05

    加密芯片使用手册

    加密芯片的安全性:1、芯片本身硬件的安全,采用U盾芯片2、算法安全,可以采用国家商用密码算法,如SM1,SM7,SSF33等算法,是保密非公开算法。加密芯片使用手册见附件 加密芯片使用手册.rar (79.94 KB )
    发表于 07-09 04:35

    Keil软件使用手册

    非常的KEIL软件使用手册,内部包含详细的软件的使用介绍,含示例详解
    发表于 10-20 19:12

    STM32f103使用手册

    STM32f103使用手册
    发表于 04-21 15:09

    STM32固件库使用手册

    最近领导让我学学嵌入式开发,在网上看了看老前辈们总结的嵌入式开发学习不归路,还是决定按照步骤开始学习。首先是获取到《STM32固件库使用手册》和《STM32F10x参考手册》两个开局手册,在网上找了
    发表于 08-04 06:40

    有没有S32R274的SPE功能详细使用手册和例子可以参考呢

    请问,有没有S32R274的SPE功能详细使用手册和例子可以参考呢,我看了reference manual,但是我还是不知道怎么在软件中启动这个功能
    发表于 03-22 08:23

    JMeter 压力测试使用手册中文使用手册

    JMeter 压力测试使用手册中文使用手册
    发表于 09-05 09:51 11次下载
    JMeter 压力测试<b class='flag-5'>使用手册</b>中文<b class='flag-5'>使用手册</b>

    JMeter压力测试使用手册的中文使用手册

    JMeter压力测试使用手册的中文使用手册
    发表于 09-08 09:57 7次下载
    JMeter压力测试<b class='flag-5'>使用手册</b>的中文<b class='flag-5'>使用手册</b>