首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DRY - out my Makefile:当命令与单个可派生参数不同时,避免重复Makefile配方

DRY是"Don't Repeat Yourself"的缩写,意为"不要重复自己"。它是一种软件开发原则,强调避免重复代码和逻辑,以提高代码的可维护性和可重用性。

在Makefile中,当命令与单个可派生参数不同时,可以通过使用变量和模式规则来避免重复。以下是一种可能的实现方式:

  1. 定义变量:
  2. 定义变量:
  3. 使用模式规则:
  4. 使用模式规则:
  5. 定义目标:
  6. 定义目标:

通过上述方式,可以实现在Makefile中避免重复定义相同的命令,只需在PARAMS变量中列出所有可派生参数,然后使用模式规则来执行相应的命令。

DRY原则的优势包括:

  • 提高代码的可维护性:避免重复代码可以减少代码的修改和维护工作量。
  • 提高代码的可重用性:将重复的代码抽象为函数、变量或模块,可以在不同的上下文中重复使用。
  • 减少错误和bug:重复的代码容易引入错误,而DRY原则可以减少这种风险。

应用场景: DRY原则适用于任何需要编写和维护代码的场景,包括前端开发、后端开发、移动开发等各个领域。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(Serverless):https://cloud.tencent.com/product/scf
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(TBaaS):https://cloud.tencent.com/product/tbaas
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云安全产品:https://cloud.tencent.com/product/security
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux 下的make命令Makefile

概述 博客内容包含linux下make命令的使用makefile的书写规则等,希望通过本文档使读者对make命令makefile文件有进一步了解,由于鄙人经验学识有限文档中会有描述不准确以及理解偏差,...fythons@sina.com 从一只猫说起hello kitty linux系统中的make命令makefile文件 makemakefile 在linux系统中make是一个非常重要的编译命令...Make的工作原理 make 命令被执行时,它会扫描当前目录下Makefilemakefile文件找到目标以及其依赖。...于是我们可以使用make命令的下述参数: -n, –just-print, –dry-run, –recon 执行参数,这些参数只是打印命令,不管目标是否更新,把规则和连带规则下的命令打印出来,但不执行...-j [], –jobs[=] 指同时运行命令的个数。如果没有这个参数,make运行命令时能运行多少就运行多少。

10.1K20

Makefile 的使用

make 命令根据文件更新的时间戳来决定哪些文件需要重新编译,这使得可以避免编译已经编译过的、没有变化的程序,可以大大提高编译效率。...在 Makefile 中怎么放置第 1 个目标: 执行 make 命令时如果指定目标,那么它默认是去生成第 1 个目标。 所以“第 1 个目标”,位置很重要。...对于上面的 Makefile,执行“make”命令时,仅 hello.c 文件比 hello 文件新,才会执行命令“armlinux-gcc –o hello hello.c”生成可执行文件 hello...(7)$(sort list) 将list中的字按字母顺序排序,并去掉重复的字。输出由单个空格隔开的字的列表。...3.4.3 其他函数 (1)$(foreach var,list,text) 前两个参数,var和list将首先扩展,注意最后一个参数text此时扩展;接着,list 扩展所得的每个字,都赋给var

4.3K42

Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

make 命令根据文件更新的时间戳来决定哪些文件需要重新编译,这使得可以避免编译已经编译过的、没有变化的程序,可以大大提高编译效率。...在 Makefile 中怎么放置第 1 个目标: 执行 make 命令时如果指定目标,那么它默认是去生成第 1 个目标。 所以“第 1 个目标”,位置很重要。...对于上面的 Makefile,执行“make”命令时,仅 hello.c 文件比 hello 文件新,才会执行命令“armlinux-gcc –o hello hello.c”生成可执行文件 hello...(7)$(sort list) 将list中的字按字母顺序排序,并去掉重复的字。输出由单个空格隔开的字的列表。...3.4.3 其他函数 (1)$(foreach var,list,text) 前两个参数,var和list将首先扩展,注意最后一个参数text此时扩展;接着,list 扩展所得的每个字,都赋给var

8.7K10

在 Golang 开发中使用 Makefile

使用 Golang 已经有一阵了,在 Golang 的开发过程中,我已经习惯于不断重复地手动执行 go build 和 go test 这两个命令. 不过,现在我已经摆脱了这个习惯。...如果只用到了不带参数的简单命令,直接这么操作可能并不可怕。但是在一些复杂的任务中,如果依旧是手动执行 go build 和 go test ,就可能会成为一个让人头疼的事情。...所以,在 makefile 的开头定义常用的命令和变量,我们可以在后面方便地对定义的命令和变量进行引用。...如果在执行 make 命令时指定目标,比如 make run,那么 make 就会构建该目标。如果没有提供任何参数,那么 make 默认会执行第一个目标。... make 进行执行时,定义的变量会被展开,$(GOBUILD) 会被展开为 go build, make 实际就会执行 go build 命令

1.6K10

Linux学习笔记(二)、常用指令(下)

在程序只有几个.c文件时,gcc一个个编译还可以,工程较大,几十个几千个.c文件时,很麻烦。...输入的代码含义是: 最终生成的可执行文件为main,这个名字自行更改,生成该可执行文件需要三个.o文件,main.o、input.o、calcu.o。...=”Verilog代码中assign类似,类似于C中的NULL,变量为NULL时候进行=后面的赋值,否则不进行赋值,即维持原值。...一般的文件名都是要生成的伪文件,而伪目标代表真正的目标名,在执行make命令时通过指定这个伪目标来执行器所在规则所定义的命令。...伪目标的主要作用是避免Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突。

2.4K21

CMake基础

/a.out 之后执行该命令,操作系统会读取刚刚生成的可执行文件,从而执行其中编译成机器码,调用系统提供的printf函数,并在终端显示出Hello, world 二、多文件编译链接 单文件编译虽然方便...,和生成各文件的规则 make a.out 敲下这个命令,就可以构建出 a.out 这个可执行文件了 和直接用一个脚本写出完整的构建过程相比,make 指明依赖关系的好处: 1.更新了hello.cpp....cpp和.o重复写 g++ 命令(%.o: %.cpp) 但坏处也很明显: 1.make 在 Unix 类系统上是通用的,但在 Windows 则不行 2.需要准确地指明每个项目之间的依赖关系...的命令行调用 读取当前目录的 CMakeLists.txt,并在 build 文件夹下生成 build/Makefile: cmake -B build 让 make 读取 build/Makefile...=1) # 添加一个宏定义 target_add_definitions(myapp PUBLIC -DMY_MACRO=1) # MY_MACRO=1 等价 target_compile_options

1.9K20

Linux 开发 | 学习 Makefile

我们显示地用 .PHONY来告诉 make 这是一个伪目标, 避免与实际目标命名冲突。 同运行程序的时候我们给个参数让程序执行特定动作一样,运行 make 时指定伪目标标签,指定执行对应的命令。...忽略出错命令 一般情况,Make 会一条一条执行命令某条命令执行后出错, Make 会终止当前规则,这可能导致整个任务终止。...archive.a: ... ifneq (,$(findstring t,$(MAKEFLAGS))) # 如果执行make -t, 则执行这里 # -t touch, 表示实际执行命令,但是这里需要这个参数命令...function 后面对应传递的参数,第一个参数函数名通过空格或者 tab 划分,如果一个函数参数不止一个,不同参数通过逗号分隔。函数调用返回,通过 $ 获取,和变量使用一致。...$(mains), $(objects)) 排序、去重函数 按字母顺序对序列(空格划分)进行排序,同时去除重复的词组, 返回按单个空格进行划分。

5.3K10

Makefile文件编写

(这有点像一个堆栈的过程) 最终生成target文件 make 参数介绍 make 的参数有很多, 可以通过 make -h 去查看, 下面只介绍几个我认为比较有用的。...参数 含义 --debug[=] 输出make的调试信息, options 可以是 a, b, v -j --jobs 同时运行的命令的个数, 也就是多线程执行 Makefile -r...命令前缀(@ or -) Makefile 中书写shell命令时可以加2种前缀 @ 和 -, 或者不用前缀....比目标新的依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复的依赖目标 $+ 所有依赖目标的集合, 不会去除重复的依赖目标 $* 这个是GNU make特有的, 其它的make不一定支持 all...server.out 和client.out 的编译命令,后面不加参数的话,会把第一个目标作为默认的。

1.2K30

makemakefile

相信大家都有过这样的经历:当我们在Linux上运行代码时,是需要在命令行上输入相关指令的,例如: user@VM-8-5-centos exercise]$ g++ test.cc -o my.out...首先:先向大家说明,make是一个命令行中的命令,而makefile则是一个文件名称,make这个命令是用来执行makefile这个文件的 makefile: 1.mekefile编译过程: Makefile...同时这些依赖也有可能此时并不存在,需要现场制作,或者是由其他厨师做好,那么这个依赖就成为了其他规则的目标,该目标也会有他自己的依赖和命令。这样就形成了一层一层递归依赖组成了Makefile文件。...避免与同名文件冲突:有时候,可能会有目标同名的文件存在。通过定义伪目标,可以避免与同名文件产生冲突。伪目标的存在告诉 Make 工具该目标不是用于生成文件,而是执行相应的操作。....PHONY:clean clean: rm -f my.out 这样一来,make clean操作就可以一直执行。 4.写在后边 有些同学还有些疑问:makefile这个文件放在哪里呀?

6810

Hello Qt——QMake用户指南

OUT_PWD 本变量包含指向生成MakeFile文件的目录的全路径 QMAKE 本变量包含qmake程序自己的名字,会放在生成的MakeFile文件中。...Variablename是必须参数,如果指定position参数,position默认为0,返回variablename变量的值列表中的第一个值。...使用逗号分隔的函数参数arguments替换1%——9%,返回处理后的字符串。 unique(variablename) 返回变量中值的链表,如果有重复的删除。...如果指定第三个参数val,函数只会测试文件中是否包含var变量。 isEmpty(variablename) 如果variablename变量为空,成功;否则,失败。...commands:生成自定义构建目标的命令 CONFIG:自定义构建目标的特定配置选项 depends:自定义目标锁依赖的现有构建目标 recurse:为了调用子目标的MakeFile文件,创建MakeFile

5.4K20

Linux设备驱动程序(二)——建立和运行模块

PWD := $(shell pwd) 获取当前所执行命令的目录 (MAKE) -C (KERNELDIR) M= 这个 makefile 在一次典型的建立中要被读 2 次,命令行中调用这个...一旦发现内核源码树,makefile 调用 default: 目标,来运行第 2 个 make 命令( 在 makefile参数化成 $(MAKE)) 象前面描述过的一样来调用内核建立系统,在第 2...err) stuff_ok = 1; else goto fail; return 0; /* success */ fail: my_cleanup(); return err; } 清理函数由非退出代码调用时不能标志为...八、模块参数 模块参数可以在运行 insmod 或 modprobe 命令装载模块时赋值,modprobe 可以从配置文件(/etc/modprobe.conf)中读取参数值。...在 insmod 改变模块参数之前,模块必须让参数对 insmod 命令可见。参数使用 module_param(变量名,类型,访问许可值)宏来声明,它定义在 moduleparam.h。

64741

Makefile学习1

gcc还提供了一些列参数,用来控制编译流程: -E #进行预处理,不作编译 -S #只做汇编处理 -c #进行编译,链接 -o #指定生成可执行程序名 对于大型项目使用gcc编译的话,每编译一次,都要敲进去几万个源文件...、makefile、GNUmakefile,make会在当前目录下自动寻找找三个文件名 如果同时存在执行makefile;如果没有找到的话,make就无法继续编译程序,产生一个错误并退出;如果名称自定的话...时可能会遇到,比如: $%:规则的目标是一个静态库文件时,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件中重复出现的文件 $*:在模式匹配和静态模式规则中,代表目标模式中%的部分。...如果希望在命令行指定的变量值替代在Makefile中的原来定义,那么我们可以在Makefile中使用指示符 override 对这个变量进行声明: .PHONY: all override web =...从另一个角度上看,就是实现了在Makefile中增加或者修改命令参数的一种机制。

33510

移植的 Makefile 教程

过去我并不知道, GNU Make POSIX 所保证的移植特性之间的区别联系。...许多常见的 make 扩展名 -- 尤其是条件判断 -- 会导致不够健壮的却又复杂的 Makefile, 因此最好避免这些情况。能够确信你的构建系统能够各司其职,正常工作是非常重要的。...项目不大的时候,Makefile 应该是相当的简单,并且随着项目的成长,以一种预见,清晰的方式不断丰富。 我不会覆盖 make 的每一个特性。如果想要学习所有完整的内容,你需要自行阅读它的规范。...make 时,它会从依赖树中接受零个或多个目标, 如果目标过时(out-of-date)了,然后构建这些目标 -- 比如,运行目标规则中的命令。...如果推断规则不存在,那么你就需要对每个规则重复同样的命令。对于大型项目,这太繁琐了,所以你可能想要有一些“配置”脚本,即使这些脚本是手写的,来为你生成这些重复命令

1.3K10

Linux之ack命令

回复【1001】获取 linux常用命令速查手册 ack是比grep好用的文本搜索工具 ack命令安装 > yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录...在搜索过程中,ack维持着认可的文件类型的列表,同时跳过未知或不必要的文件类型。它同样避免检查多余的元数据目录。...命令参数 -n, 显示行号 -l/L, 显示匹配/匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索....-h, 不显示名称 -v, 显示匹配 在当前目录递归搜索单词”eat”,匹配类似于”feature”或”eating”的字符串: > ack -w eat 搜索有特殊字符的字符串’$path=.’...xml/ --[no]yaml .yaml .yml 获取包含CFLAG关键字的Makefile的文件名 > ack --make CFLAG ack查找my.cnf文件 > ack

1.1K00

Linux之ack命令

ack是比grep好用的文本搜索工具 ack命令安装 > yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录,比如.svn,.git,CSV等目录...在搜索过程中,ack维持着认可的文件类型的列表,同时跳过未知或不必要的文件类型。它同样避免检查多余的元数据目录。...命令参数 -n, 显示行号 -l/L, 显示匹配/匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索....-h, 不显示名称 -v, 显示匹配 在当前目录递归搜索单词”eat”,匹配类似于”feature”或”eating”的字符串: > ack -w eat image.png > ack -Q '...xml/ --[no]yaml .yaml .yml 获取包含CFLAG关键字的Makefile的文件名 > ack --make CFLAG ack查找my.cnf文件 >

1.2K20

Linux之ack命令

ack是比grep好用的文本搜索工具 ack命令安装 > yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录,比如.svn,.git,CSV等目录...在搜索过程中,ack维持着认可的文件类型的列表,同时跳过未知或不必要的文件类型。它同样避免检查多余的元数据目录。...命令参数 -n, 显示行号 -l/L, 显示匹配/匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索....-h, 不显示名称 -v, 显示匹配 在当前目录递归搜索单词”eat”,匹配类似于”feature”或”eating”的字符串: > ack -w eat 搜索有特殊字符的字符串’$path=.’...xml/ --[no]yaml .yaml .yml 获取包含CFLAG关键字的Makefile的文件名 > ack --make CFLAG ack查找my.cnf文件 > ack

1.7K00

探索Linux内核:Kconfig的秘密

Kconfig帮助使Linux内核高度模块化和定制。...通过将源文件划分为不同的模块/组件,每个组件都由自己的Makefile管理。您开始构建时,顶级Makefile按正确的顺序调用每个组件的makefile,构建组件,并将它们收集到最终的执行程序中。...编译源文件的命令行也很重要,因为不同的命令行可能导致不同的对象文件。 .C文件通过#include指令,您需要编写这样的规则: main.o: defs.h recipe......对于GNU编译器集合(GCC),只需添加一个命令参数:-MD depfile # In scripts/Makefile.lib c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS...因为还记录了命令行,所以很容易比较最后的编译参数和当前的编译参数

1.7K11
领券