规则调用脚本时如何定义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 $< > [email protected]

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

很感谢任何形式的帮助。

十足咖啡

我认为规则应为:

$(CURDIR)/analysis/%: $(CURDIR)/data/%/pass
   sh operations.sh $< [email protected]

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

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

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

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

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

运行整套设备。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用eval时Makefile规则不是目标

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Linux

从Shell脚本调用makefile

来自分类Java

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

来自分类Dev

如何使makefile使用模式规则?

来自分类Dev

如何动态生成Makefile目标

来自分类Dev

Makefile:如何确定构建目标?

来自分类Linux

如何强制makefile重建目标

来自分类Dev

Makefile目标被调用两次

来自分类Dev

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

来自分类Dev

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

来自分类Dev

makefile使用目标中定义的变量

来自分类Dev

makefile解析目标以定义依赖项

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

gcc makefile错误:“没有规则可以使目标……”

来自分类Dev

Makefile:无规则可作为目标

来自分类Dev

从Makefile内部调用另一个Makefile的规则

来自分类Dev

如何将自定义选项添加到makefile中的目标?

来自分类Dev

在不应该使用的makefile规则时

来自分类Dev

CMake:如何获取安装规则的目标位置

来自分类Dev

目标依赖项:Makefile没有使目标出错的规则

来自分类Javascript

Google表格脚本-如何根据一组预定义的规则随机选择单元格

来自分类Dev

调用python脚本时如何捕获用户命令?

TOP 榜单

热门标签

归档