GNU中有两个%标记的规则

时间:2017-08-22 18:57:01

标签: makefile gnu-make

我正在尝试使用GNU make来自动化我的分析管道。我有一个脚本,它使用模式data / sub001 / sub001_input.txt读取文件并写入data / sub001 / sub001_output.txt。我怎样才能为每个主题编写一个符合此模式的规则?这是我到目前为止的尝试:

# List of all the subjects
SUBJECTS ?= sub001 sub002 sub003

/data/%/%_output.txt : process.py data/%/%_input.txt
    python process.py $*

# for each $SUBJECT in $SUBJECTS
all : /data/$(SUBJECT)/$(SUBJECT)_output.txt
    @echo 'Data analysis complete!'

我希望调用all目标:

python process.py sub001
python process.py sub002
python process.py sub003

如果相应的sub###_input.txt文件发生变化,我希望重新处理一个主题,如果process.py文件发生变化,我希望重新处理所有主题。

1 个答案:

答案 0 :(得分:2)

您不能在模式规则中使用多个模式字符。

你可以使用一个代表整个中间部分的单一图案,然后剥去你想要的部分:

/data/%_output.txt : process.py data/%_input.txt
        python process.py $(*F)