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

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

3天内不再提示

linux系统中Makefile的使用方法

嵌入式开发星球 来源:嵌入式开发爱好者 作者:嵌入式开发爱好者 2024-05-11 08:49 次阅读

Makefile是一种编译控制文件,广泛用于项目的自动化构建。它定义了一系列的规则来指导构建的过程。通过Makefile,开发者可以轻松管理大型项目的编译链接、清理等任务。本文将从Makefile的基础用法讲起,逐步深入到更高级的应用,为你呈现一个全面而详细的Makefile使用手册。

第一:Makefile的基本结构

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

target: dependencies    commands

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

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

第二:变量的使用

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

CC=gccCFLAGS=-std=c99LDFLAGS=OBJ=main.o utils.oapp: $(OBJ)    $(CC) -o app $(OBJ) $(LDFLAGS)main.o: main.c    $(CC) $(CFLAGS) -c main.cutils.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 /Qelse    RM=rm -fendifclean:    $(RM) *.o

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

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

# 在子Makefile中include config.mk

第九:自定义函数

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

define run-cc$(CC) $(CFLAGS) -o $@ $^endefapp: $(OBJ)    $(call run-cc)

第十:处理多目标

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

FILES := file1 file2 file3all: $(FILES)$(FILES):    touch $@

第十一:伪目标的使用

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

.PHONY: cleanclean:    rm -f *.o app

第十二:调试Makefile

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

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

结语

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

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

审核编辑 黄宇

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

    关注

    87

    文章

    11030

    浏览量

    207240
  • Makefile
    +关注

    关注

    1

    文章

    124

    浏览量

    19117
收藏 人收藏

    评论

    相关推荐

    Linux系统中的Makefile使用方法

    今天主要和大家聊一聊,Linux系统中的Makefile使用方法
    发表于 11-17 09:35 3672次阅读

    linux系统中常见注册函数的使用方法

    大家好,今天给大家分享一下,linux系统中常见的注册函数register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()的使用方法
    发表于 10-19 09:28 266次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>系统</b>中常见注册函数的<b class='flag-5'>使用方法</b>

    Makefile简介和使用方法

    Makefile是和make工具一起配合使用的,用于组织管理项目源代码的编译和链接。
    的头像 发表于 12-26 12:24 971次阅读

    Makefile for VCS 视频讲解

    ASIC/SoC芯片设计验证中常常使用Makefile来管理验证环境,运行验证案例。本视频借用网络上的一篇Makefile(Synopsys VCS)文件,简要介绍了Makefile的基本语法和
    发表于 10-03 19:01

    Linux使用小技巧:嵌入式Linux系统实现截屏功能的方法和步骤

    在桌面级操作系统,下载一个截图软件就能实现截屏操作,但在嵌入式Linux系统,要实现小小的截图功能却没有那么简单。本文为您介绍嵌入式
    发表于 05-03 07:00

    简单分析linux内核的结构体使用方法

    结构体的使用并不熟练,导致在linux开发中一头雾水。下面简单分析结构体的使用方法。1:结构体的定义struct 结构体名{ 成员列表; } 变量名列表;注意这里的变量名可以直接跟在后面也可以单独定义struct 结构体名 变量名 ;举例: ...
    发表于 01-19 08:26

    基于Linux 2.6内核Makefile分析

    由于Linux的独特优势,使越来越多的企业和科研机构把目光转向Linux的开发和研究上。目前Linux最新的稳定内核版本为2.6.17,但是当今绝大部分对于Linux
    发表于 09-18 19:09 0次下载
    基于<b class='flag-5'>Linux</b> 2.6内核<b class='flag-5'>Makefile</b>分析

    关于Linux 2.6内核Makefile的分析

    [摘要] 由于Linux的独特优势,使越来越多的企业和科研机构把目光转向Linux的开发和研究上。目前Linux最新的稳定内核版本为2.6.17,但是当今绝大部分对于Linux
    发表于 11-02 10:12 1次下载

    Embeded linux之buildroot的使用方法

    Embeded linux之buildroot使用方法
    发表于 05-15 14:10 3097次阅读
    Embeded <b class='flag-5'>linux</b>之buildroot的<b class='flag-5'>使用方法</b>

    Linux内核的Makefile、Kconfig和.config文件

    Linux内核源码文件繁多,搞不清Makefile、Kconfig、.config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些
    的头像 发表于 11-12 17:31 2797次阅读

    嵌入式LinuxMakefile万能写法

    《嵌入式LinuxMakefile万能写法》SRC := ${wildcard *.c}OBJ := ${patsubst %.c, %.o, $(SRC)}CC
    发表于 11-01 17:06 2次下载
    嵌入式<b class='flag-5'>Linux</b>中<b class='flag-5'>Makefile</b>万能写法

    Makefile】简单实用的Makefile模板来了

    Linux + Makefile】简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1716次阅读
    【<b class='flag-5'>Makefile</b>】简单实用的<b class='flag-5'>Makefile</b>模板来了

    AN033 基于Linux环境下的Makefile工程管理

    AN033 基于Linux环境下的Makefile工程管理
    发表于 02-23 19:08 0次下载
    AN033 基于<b class='flag-5'>Linux</b>环境下的<b class='flag-5'>Makefile</b>工程管理

    Linux 下的make 工具和 Makefile

    单点的文章过度一下,上一篇讲到了 Linux 下的 C 编程,本文就要引出 Make 以及 Makefile 了。 嵌入式 Linux 入门系列博文: 嵌入式 Linux 入门(一、
    的头像 发表于 06-22 10:45 669次阅读
    <b class='flag-5'>Linux</b> 下的make 工具和 <b class='flag-5'>Makefile</b>

    Linux用途和基本使用方法

    一个广泛应用的操作系统。本文将详细介绍Linux的用途和基本使用方法。 首先,让我们来了解一下Linux的用途。Linux具有广泛的应用领域
    的头像 发表于 11-23 11:13 785次阅读