是否可以创建与两个或三个不同模式匹配的Makefile模式?我正在使用Gnu make。
在我目前的设置中,我以简化的形式使用两个Bash for循环来将一组文件转换为另一组,并创建最终的结果文件。例如:
#!/bin/bash
XMIN=$1
XMAX=$2
YMIN=$3
YMAX=$4
z=$5
FINAL_LIST=
for y in `seq $YMIN $YMAX`;
do
SOURCE_LIST=
echo Processing column $y
for x in `seq $XMIN $XMAX`;
do
# Convert from file source/something_${x}_${y}_${z} to
# target/something_else_$${x}_${y}_${z}
echo Processing X ${x} Y ${y} with Z ${z}
# do_something
SOURCE_LIST+="target/something_else_$${x}_${y}_${z} "
done
# Create something for this line
echo Processing ${SOURCE_LIST} target_line_${y}_${z}
# process the line
FINAL_LIST+="target_line_${y}_${z} "
done
# Finally, compose the final thing
echo Process the final result: ${FINAL_LIST} result_${z}
# process the final result
# We're done
我想用Makefile更有效地做到这一点,因为它允许我并行执行事情,并且它会照顾,"行结果"仅当特定行的某些内容发生变化时才会重新生成。
我已经使用Makefile将单个数据文件转换为另一种格式,并使用简单的模式匹配。 Makefile非常适合处理我的> 500k数据文件库 - 它可以非常快速地检测更改的源文件,并仅对更改的数据文件执行转换。
这里的问题是我不知道如何制作具有多种不同模式的Makefile模式。以下是一个简单的模式:
%.target : %.source
# do something
但我不知道,以下是否可能(作为伪代码):
<var_pat_Z>_<var_pat_Y>.target: <var_pat_Z>_<var_pat_Y>.source
# do something else
没有必要使用Makefile实现它,但我仍然需要找到一种方法来检测已更改的源文件,以及并行执行的能力。目前我在我的bash脚本中处理这些检测,并通过与Gnu parallel命令并行执行bash脚本来实现并行化。无论如何,这很可能不是最佳方式。