规则调用脚本时如何定义Makefile目标?

布鲁斯·莫兰

我第一次尝试使用它make来运行一系列脚本。我有一个这样的树目录结构:

project
├── data
│   └── run1
│       └── pass
│            ├── 0
│            ├── 1
│            └── 2
├── include
│   └── variables.mk
├── Makefile
└── scripts
    └── operations.sh

我有一个数据集,run1其中包含多个dirs pass,所有这些都包含txt文件。operations.sh脚本使用一种方法来递归搜索命名目录(此处为pass)。我希望有更多的数据(run2run3等),并且希望能够在数据可用时以相同的方式处理它们。为此我使用includevariables.mk(不知道这是适当的,但它工作正常),定义$(INPUT_RUNS),我会简单地更新为新的运行到达。

我写了一个测试Makefile

include $(CURDIR)/include/variables.mk
DATA_DIRS := $(addprefix $(CURDIR)/data/, $(foreach r, $(INPUT_RUNS), $(r))/pass)
OUT_DIRS := $(addprefix $(CURDIR)/analysis/, $(foreach r, $(INPUT_RUNS), $(r)))

##targets 
all: operations_run 

##operations
operations_run: $(OUT_DIRS) $(DATA_DIRS)
  mkdir -p $</operations
  sh scripts/operations.sh $</operations $(DATA_DIRS)

这将指定一组dirs(dataanalysis每次运行)。然后,我可以确定要运行的目标operations.sh这很好。但这make在我看来并没有真正使用我要make输出,然后重新运行make,如果没有数据或分析的任何部分更改,则不重新生成输出。

因此,我的问题是:通常,目标是文件。operations.sh脚本运行的不是我开发的方法,并且具有关于输入和输出的特定规则(如所见,都是dirs)。我想将目标设置为产生的一组文件operations.sh我希望它能像

%.output.txt: $(DATA_DIRS)
    sh operations.sh $< > $@

我想我知道如何使用%命名依赖项,尽管还没有测试过。在访问目标文件$(DATA_DIRS)可以给予依赖make吗?从概念上讲,我不知道从哪方面开始。

很感谢任何形式的帮助。

十足咖啡

我认为规则应为:

$(CURDIR)/analysis/%: $(CURDIR)/data/%/pass
   sh operations.sh $< $@

基本上有一个针对个人支出的规则。假设操作采用输入和输出目录。

尽管这可能会“考虑”输出目录,但无论出于何种原因(请考虑查看器中的临时文件)。我个人喜欢手动“标记”完成。

$(CURDIR)/analysis/%/.done: $(CURDIR)/data/%/pass
   sh operations.sh $< $(@:/.done=)
   touch $@

这会将.done带有上一次成功创建时间戳记的空文件放在outdir中。

operations_run: $(addsuffix /.done,$(OUT_DIRS))

运行整套设备。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有多个目标时,如何在Makefile规则中的字符串中添加后缀?

Makefile:无规则作为目标:如何设置正确的规则?

在调用特定 Makefile 规则时强制定义某些环境变量

使用eval时Makefile规则不是目标

如何在makefile中为目标编写特定规则?

如何将$ @更新为Makefile变量相关目标规则?

如何在Makefile中设置目标以调用2个目标

如何实现依赖于其他 makefile 目标是否被调用的 makefile 目标

具有多个目标的Makefile规则,可进行单次调用

调用目标时如何更新变量?

从Shell脚本调用makefile

Makefile规则与源文件和目标文件

Makefile 没有针对目标的规则

如何在Ant脚本中调用Maven目标?

如何修复错误“无法读取未定义的属性'调用'。检查元素时发生异常,检查'规则'方法”?

如何使makefile使用模式规则?

如何动态生成Makefile目标

Makefile:如何确定构建目标?

如何强制makefile重建目标

Makefile目标被调用两次

无法在Shell中调用的Makefile中的目标

如何定义一个通配符(%)匹配整个目标的Make规则?

定义用于创建共享库的makefile的规则

如何正确加载ACE编辑器脚本并添加自定义突出显示规则脚本?

makefile使用目标中定义的变量

makefile解析目标以定义依赖项

“没有使目标'安装'的规则” ...但是Makefile存在

顺序对makefile规则中的目标有影响吗?

尽管存在目标,但Makefile规则始终会执行