I wrote some code for a class I'm teaching检查一些工具是否在某些测试数据和脚本上都具有正确(和相同)的行为,以比较它们的相对性能。我的想法是,如果我的学生可以将他们的源代码放在特定目录中,然后将所有脚本应用到它 - 我可以将他们的所有解决方案放在我的目录副本中。
我已将其设置为如果您将名称以_src
结尾的目录放入特定目录,并且此目录中包含Makefile,则源将包含在构建中。但是,我实现它的方式基本上只是我的Makefile中的shell脚本。
mappers=$(wildcard *_src)
all:
echo $(mappers)
for m in $(mappers); do \
mapper_name=`basename $$m _src` ;\
echo $$mapper_name ;\
(cd $$m && make) ;\
if [ ! -e $$mapper_name ]; then \
cp $$m/$$mapper_name $$mapper_name ;\
fi ;\
if [ $$m/$$mapper_name -nt $$mapper_name ]; then \
cp $$m/$$mapper_name $$mapper_name ;\
fi ;\
done ;\
for m in $(mappers); do \
mapper_name=`basename $$m _src` ;\
if [ ! -x $$mapper_name ]; then \
echo "Hey! where did $${mapper_name} go?" ;\
exit 1 ;\
fi ;\
done
我确信必须有一种更聪明的方法在Makefile中包含子目录,以便能够自动检测它们,但是当它超出简单的设置时,我对Make
并不熟悉。< / p>
我正在考虑制作一个可以更新我的Makefile的脚本,类似于makedepends
的工作方式,但我不确定这是最好的解决方案。
答案 0 :(得分:1)
这样的事情可能会起作用 - 对于每个_src目录,它会创建一个_build目录,复制文件,然后从_build目录构建。完成后,它会触及_build / .built文件以标记它已完成:
//This is correct
'I' => 1, 'X' => 7
'I' => 0, 'X' => 7
//This is not correct:
'I' => 1, 'X' => 7
'I' => 1, 'X' => 7
//This is not correct
'I' => 0, 'X' => 7
'I' => 0, 'X' => 7