首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除Makefile中的复制:目标文件在伪变量‘a’下编写一次,然后再作为配方目标写入

删除Makefile中的复制:目标文件在伪变量‘a’下编写一次,然后再作为配方目标写入
EN

Stack Overflow用户
提问于 2019-10-10 09:29:09
回答 1查看 106关注 0票数 0

下面我复制了一个Makefile示例,用于执行一些脚本来清理和合并数据。

这种Makefile格式要求我列出每个目标文件两次:一次在all下,一次作为每个菜谱的目标。随着makefile变得越来越长,我有时会忘记在创建新的菜谱之后向all添加新的目标。

如果没有all变量,Make将只构建第一个目标及其先决条件。

如何从Makefile中删除这个复制源,如果它们的先决条件发生变化,仍然会检查和重建所有的食谱目标?

代码语言:javascript
运行
AI代码解释
复制
DIR_DATA = ./data
DIR_RAW = $(DIR_DATA)/raw
DIR_MUNGE = ./munge

VPATH = $(DIR_RAW) $(DIR_DATA) $(DIR_MUNGE)

########################################################   
####################### Recipes ########################
########################################################

ds_mtcars.rds: ds_mtcars.R ds_mt_raw.csv
    Rscript $<

ds_mt_agg.rds: ds_mt_agg.R ds_mtcars.rds
    Rscript $<

ds_mt_temp.rds: ds_mt_temp.R ds_mtcars.rds ds_mt_agg.rds
    Rscript $<

########################################################   
####################### Phony vars #####################
########################################################    

.Phony: all 

all: ds_mtcars.rds ds_mt_agg.rds ds_mt_temp.rds 

clean: 
  rm -f ./data/*.rds
EN

回答 1

Stack Overflow用户

发布于 2019-10-10 14:35:35

通常,您可以通过使用模式和列表来避免这种重复。在您的示例中,由于依赖项似乎不遵循简单的模式,因此必须显式定义任何与文件关联的唯一依赖项。假设每个.rds依赖于相应的.R文件,您可以使用静态模式规则消除一些复制,如下所示:

代码语言:javascript
运行
AI代码解释
复制
RDS_FILES := ds_mtcars.rds ds_mt_agg.rds ds_mt_temp.rds

all:

# define any unique dependencies explicitly:
ds_mtcars.rds: ds_mt_raw.csv
ds_mt_agg.rds: ds_mtcars.rds
ds_mt_temp.rds: ds_mtcars.rds ds_mt_agg.rds

# use Static pattern rule -- 
#  explicit dependencies will be stacked
$(RDS_FILES) : %.rds : %.R
    Rscript $<

.Phony: all
all: $(RDS_FILES)

您仍然必须在起始列表(RDS_LIST)和特殊依赖关系规则中列出具有特殊依赖项的每个目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58328245

复制
相关文章
Makefile 文件格式;makefile伪目标
           第二行的gcc -o test prog.o code.o是可运行命令。
西湖醋鱼
2020/12/30
8610
Makefile的伪目标
1、Makefile伪目标的格式: .PHONY : clean clean:     rm xxxx 2、Makefile伪目标的作用: 第一种情况: 如果我们需要书写这样的一个规则:规则所定义的命令不是去创建目标文件,而是通过make命令行明确指定它来执行一些特点的命令,就像例题中的clean。当文件夹中没有clean这个文件的时候,我们输入“make clean”能按照初衷执行,但是一旦文件夹中出现clean文件,我们再次输入“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最新
233333
2018/03/07
1.4K0
makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command … … 2. 假如编译两个文件可以这么写: a.o:a.c  gcc -c a.c b.o:b.c  gcc -c b.c Test: a.o b.o   gcc -o Test a.o b.oclean:  rm *.o 我们可以单独这么运行: make a.o 或者 make b.o 或者 make clean 注意上面三个的区
xcywt
2018/01/11
1.6K0
Makefile文件编写
make 的参数有很多, 可以通过 make -h 去查看, 下面只介绍几个我认为比较有用的。
用户2929716
2018/08/23
1.3K0
Makefile实例:批量编译多个目标
gist: https://gist.github.com/songtianlun/8984626fd80cd20b7c2e71f95caaf8d1
宋天伦
2020/10/26
2.2K0
Makefile实例:批量编译多个目标
我能看懂的MakeFile(自命名,多文件,多目标)
好,我解释一下。 我们的目标文件(就是拿来运行的那个)其实就是通过文件之间的依赖关系,对源文件进行编译而得到的,但是这个依赖关系系统不知道,所以需要我们告诉系统。Makefile就是一种很优秀的方法。
看、未来
2020/08/26
1K0
makefile中的include的作用(makefile中的变量)
例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $ mkdir test $ cd test $ mkdir sub 在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件 建立一个简单的Makefile src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo $(dir) @echo $(obj) @echo “end” 执行结果分析: 第一行输出: a.c b.c ./sub/sa.c ./sub/sb.c wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。 第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息 第三行输出: a.o b.o sa.o sb.o 在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o, 任何输出。 或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样的。 这里用到makefile里的替换引用规则,即用您指定的变量替换另一个变量。 它的标准格式是 $(var:a=b) 或 ${var:a=b} 它的含义是把变量var中的每一个值结尾用b替换掉a 今天在研究makefile时在网上看到一篇文章,介绍了使用函数wildcard得到指定目录下所有的C语言源程序文件名的方法,这下好了,不用手工一个一个指定需要编译的.c文件了,方法如下: SRC = $(wildcard *.c) 等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样: SRC = $(wildcard *.c) $(wildcard inc/*.c) 也可以指定汇编源程序: ASRC = $(wildcard *.S) 这样一来,makefile模板可修改的基本就是AVR名称和时钟频率了,其它的一般不用动了。
全栈程序员站长
2022/08/02
3.4K0
makefile文件编写「建议收藏」
makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明:
全栈程序员站长
2022/09/06
3.4K0
makefile文件编写「建议收藏」
【Makefile】简单的Makefile编写
Makefile编写 程序的编译和链接 使用C、C++编写可执行文件,首先要把源文件编译成中间代码文件,Linux下是.o文件,即Object File,这个动作叫做编译(complie)。 然后再把大量的Object File合成执行文件,这个动作叫链接(link)。 一个项目会拥有成百上千个源程序文件,再使用G++ or GCC会很麻烦。于是Makefile闪亮登场。 Makefile确定整个工程的编译规则,只需要一个make命令,就可以实现“自动化编译”。 make是一个解释Make
半生瓜的blog
2023/05/13
1.1K0
【Makefile】简单的Makefile编写
Linux基础操作
命名模式:可以移动光标,进行复制,粘贴之类的命令操作 插入模式:可以进行编写 底行模式:在底行中进行相应的操作
code-child
2023/05/30
5210
Linux基础操作
在目标检测中如何解决小目标的问题?
在深度学习目标检测中,特别是人脸检测中,由于分辨率低、图像模糊、信息少、噪声多,小目标和小人脸的检测一直是一个实用和常见的难点问题。然而,在过去几年的发展中,也出现了一些提高小目标检测性能的解决方案。本文将对这些方法进行分析、整理和总结。
公众号机器学习与AI生成创作
2021/04/30
1.5K0
在目标检测中如何解决小目标的问题?
程序员C语言快速上手——工程篇(十三)
当C语言工程很大,源码非常多时,如果还去使用GCC命令编译程序,几乎是不现实的。这时候,可以通过编写shell脚本去执行编译命令,当然这并不是一种好的方式。在Linux上我们可以写shell脚本,在Windows上则可以编写bat脚本
arcticfox
2019/10/09
3.2K0
换个角度说Makefile
作为Linux下的C/C++开发者,没接触过makefile一定说不过去,通常构建大型的C/C++项目都离不开makefile,也许你使用的是cmake或者其他类似的工具,但它们的本质都是类似的。
编程珠玑
2020/02/11
7780
换个角度说Makefile
使用Python批量复制源目录下的所有Excel文件复制到目标目录中
前几天在Python白银群【由恒远】问了一个Python自动化办公处理的问题,这里拿出来给大家分享下。
Python进阶者
2023/09/02
6940
使用Python批量复制源目录下的所有Excel文件复制到目标目录中
盘点GAN在目标检测中的应用
1,2017-CVPR: A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection 摘要 如何学习对遮挡和变形不敏感的物体检测器?当前解决方案主要使用的是基于数据驱动的策略:收集具有不同条件下的对象物体的大规模数据集去训练模型,并期望希望最终可学习到不变性。 但数据集真的有可能穷尽所有遮挡吗?作者认为,像类别一样,遮挡和变形也有长尾分布问题:一些遮挡和变形在训练集是罕见的,甚至不存在。 提出了一种解决方案:学习一个对抗网
公众号机器学习与AI生成创作
2020/10/27
1.7K0
盘点GAN在目标检测中的应用
替换目标中覆盖的文件如何恢复?
想必大家对于下面这个窗口都非常熟悉,当复制的文件粘贴到一个存在同名文件的文件夹中就会出现该提示窗口,如果选择的是替换,那么新文件夹就会将文件夹中的同名文件覆盖掉。但其实很多时候,由于粗心等问题,会将一些重要文件给覆盖了,那么替换覆盖的文件怎么恢复呢?下面,我们一起往下看看吧!
用户7442547
2023/01/08
5.5K0
[Python]找出文件夹(及其子文件夹)中的文件并复制到目标文件夹中
原文链接:https://blog.csdn.net/humanking7/article/details/100770685
祥知道
2020/03/10
3.5K0
认识目标文件的符号
符号是链接的粘合剂,没有符号无法完成链接。每一个目标文件都会有一个相应的符号表(Symbol Table),表里记录了目标文件用到的所有符号。
恋喵大鲤鱼
2019/06/24
1.6K0
makefile介绍 通俗易懂
在学习Makefile之前,首先介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。
用户8418197
2021/08/29
8820
目标检测框架在目标跟踪中的应用
从SiamRPN将跟踪问题定义为one-shot detection任务之后,出现了大量将检测组件由于跟踪的研究。不过Siamese系列一个很大的问题在于其本质仍然是一个模板匹配问题,网络关注的是寻找与target相似的东西,而忽视了区分target和distractor的判别能力,这正是目标检测任务所擅长的。目标检测和目标跟踪的关键差异在于检测是一个class-level的任务,而跟踪是一个instance-level的任务(即检测只关注类间差异而不重视类内差异,跟踪需要关注每一个实例,同时跟踪的类别是不可知的)。
AiCharm
2023/05/15
9760
目标检测框架在目标跟踪中的应用

相似问题

Makefile:12:目标'lint‘的配方失败

10

makefile:警告:重写目标“构建”的配方

14

Makefile:160:目标'all‘的配方失败

1142

在makefile中分配目标配方中的变量值

13

在Makefile中使用.PHONY目标作为变量

339
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档