首页 > 其他分享 >5个编写高效Makefile文件的最佳实践

5个编写高效Makefile文件的最佳实践

时间:2023-05-20 13:45:26浏览次数:44  
标签:文件 高效 变量 可以 Makefile 规则 编写 我们

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发效率和产品质量


确定目标

在编写Makefile文件之前,我们需要明确我们的目标是什么。我们需要知道我们需要构建哪些文件,以及它们之间的依赖关系。为了确定目标,我们需要考虑以下问题:

  • 我们正在编译哪些文件?这些文件在哪里?
  • 这些文件之间有什么依赖关系?也就是说,哪些文件需要在哪些文件之前构建?
  • 我们需要定义哪些规则来构建这些文件?这些规则应该包括什么?

一旦我们确定了这些问题,我们就可以编写Makefile文件并开始构建我们的项目。


使用变量

Makefile中的变量可以使我们的代码更加模块化和可维护。我们可以将常量放入变量中,以便在整个Makefile中重复使用。例如,我们可以将编译器的路径、编译器选项和库路径都放入变量中。此外,我们还可以在变量中存储其他有用的信息,例如项目名称、版本号等。通过使用变量,我们可以更轻松地管理我们的代码,并确保代码的一致性和可读性。

需要注意的是,变量名应该清晰明了,以便其他人可以轻松理解代码的意图,并提高我们的代码质量。

CC = gcc
CFLAGS = -Wall -O2
LIBS = -lm

使用自动变量

自动变量可以使我们在规则中引用目标和依赖关系,以及其他有用的信息。例如,$@代表目标文件名,$<代表第一个依赖文件名。这些自动变量可以使我们的Makefile文件更加简洁和易于维护。

此外,我们可以使用其他自动变量来进一步简化我们的Makefile。例如,$^代表所有依赖文件的列表,$?代表所有比目标文件更新的依赖文件列表。我们还可以使用通配符来匹配多个文件,例如*.c表示所有.c文件。


使用模式规则

使用模式规则可以使我们更加灵活地编写Makefile文件。它允许我们使用通配符来匹配文件名,并使用相同的规则来构建它们。例如,我们可以使用以下规则来编译所有的.c文件:

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

这个规则指定了一个目标模式%.o,表示任意以.o结尾的目标文件。它还指定了一个依赖模式%.c,表示与目标文件同名的.c源文件。最后,它使用$(CC)$(CFLAGS)变量来指定要使用的编译器和编译选项。

通过这个规则,我们可以轻松地编译所有的.c文件,而不需要为每个文件都编写一个单独的规则。


使用.PHONY规则

.PHONY规则可以使我们更加精确地指定Makefile文件中的目标。它告诉make命令,某个目标是一个伪目标,不是一个实际的文件名。例如,我们可以使用以下规则来定义.PHONY目标:

.PHONY: all clean

all: $(TARGET)

clean:
    rm -rf $(OBJS) $(TARGET)

结论

Makefile文件是一种非常有用的工具,可以提高我们的开发效率。为了使我们的Makefile文件更加简洁、易于维护和灵活,可以通过一些技巧,包括使用变量、自动变量、模式规则和.PHONY规则。

除此之外,我们还需要关注一些其他的方面。比如说,我们可以考虑在Makefile文件中添加一些注释,以帮助其他人更好地理解我们的Makefile。

标签:文件,高效,变量,可以,Makefile,规则,编写,我们
From: https://www.cnblogs.com/xiaowange/p/17417113.html

相关文章

  • 编写程序,随机产生30个1-100之间的随机整数,按5行6列的格式输出
    大家好,我是皮皮。一、前言前几天在某乎上看到了一个粉丝提问,编写程序,随机产生30个1-100之间的随机整数并存入5行6列的二维列表中,按5行6列的格式输出?这里拿出来跟大家一起分享下。二、实现过程后来问了【ChatGPT】,给出的回答如下:以下是一个Python程序来实现上述任务:#coding:utf-8......
  • 第十四篇——如何用通达信绘图函数画线?(从零起步编写通达信指标公式系列)
    内容提要:本文主要介绍了通达信指标公式常用绘图函数的第一种类型——画线函数,讲解了DRAWNULL、NODRAW、PLOYLINE、DRAWSL这四个画线函数的具体用法。 在上一篇文章中,给大家简单介绍了通达信指标公式绘图函数的三种类型,接下来将详细讲解这些函数的具体用法。说到绘图函数,就不......
  • 更高效便捷的开发体验——Cloud Studio 编辑器命令行工具
    CloudStudio是一个云端在线开发平台,在CloudStudio的控制台页面中,可以方便快捷创建或者打开一个工作空间。工作空间提供了在线编辑器给大家访问远端开发环境。大部分开发时间都与这个在线编辑器打交道,在线编辑器效果如下图所示:通过该在线编辑器,可以使用编辑器UI进行如下操......
  • 编写程序,随机产生30个1-100之间的随机整数,按5行6列的格式输出
    大家好,我是皮皮。一、前言前几天在某乎上看到了一个粉丝提问,编写程序,随机产生30个1-100之间的随机整数并存入5行6列的二维列表中,按5行6列的格式输出?这里拿出来跟大家一起分享下。二、实现过程后来问了【ChatGPT】,给出的回答如下:以下是一个Python程序来实现上述任务:#coding......
  • 投标文件--技术标 反馈及编写顺序
    一问题反馈:1.原来写过的投标文档,整体内容适当变一变,不要原封不动,适当组合组合2.技术指标--拿出一个大的章节放到突出位置二编写顺序参照投标文件搜索找到关键字‘技术标’相关字眼找到‘投标人须知前附表’找到‘投标文件格式要求’看一遍上面这些要求,如果格式要......
  • ☆ 用Zotero高效管理文献【教程...】
    Zotero介绍Zotero是一款免费开源的文献管理工具,它可以帮助用户收集、整理、管理和引用文献。除了基本的文献管理功能外,Zotero还支持添加标签、笔记、附件等功能,可以满足用户对文献管理的大部分需求。Zotero的优点包括:免费:Zotero是一款完全免费的软件,不需要任何付费订阅。开源......
  • 正点原子Linux第31章《Uboot顶层Makefile详解》学习
    uboot目录结构1. 文件夹arch:存放关于CPU架构的代码2. 文件夹board:存放关于特定开发板的代码3. 文件夹configs:存放uboot的配置,文件的格式为:xxxxx.deconfig,通过编译(make),生成.config文件。4. 文件u-boot.xxx,大多数为编译相关的或者编译生成的目标文件,例如uboot.imx等等......
  • hexo-快速、简洁且高效的博客框架
    title:hexo快速、简洁且高效的博客框架abbrlink:38713date:2022-03-0220:30:40tags:Hexo博客框架官方地址:安装代码:npminstallhexo-cli-ghexoinitblogcdblognpminstallhexoserverhexothemeyun食用方法Inyourhexofolder:npminstallhexo-......
  • 《Typora+PicGo +Github + jsDelivr + TinyPNG打造稳定快速、高效免费图床》的体验
    《Typora+PicGo+Github+jsDelivr+TinyPNG打造稳定快速、高效免费图床》前言我目前已完成Typora+PicGo图床配置以及PicGo上传失败的解决办法。不过看了EvanXu的这个图床后,发现还可以改进。原先我用的typora+PicGo+Gitter打造图床,而EvanXu的方法是用GItHub做仓库,用jsDelivr做C......
  • STM32环形串口队列程序 大数据串口收发 实时不丢包 串口程序平常产品开发中编写或移
    STM32环形串口队列程序大数据串口收发实时不丢包串口程序平常产品开发中编写或移植的程序并亲自测试通过,均为工程文件格式,可直接编译使用。注:毫无基础的请勿拍,程序文件不接受退货。该程序为大数据量吞吐的串口收发例程,中断接收,边收边发,采用大数据环形队列,处理过程超快不丢包,接......