在弄乱了foreach循环,eval以及美元符号,括号,分号和诸如此类的各种组合后,我终于在Makefile中获得了一堆shell命令所需的结果。
我有一个目录结构:
> 。
> ./Makefile
> 。/资源
> ./source/a
> ./ource / b
> ./source/c
和Makefile:
WORKDIR?=$(shell pwd)/builddir_$(SRCDIR)
all: copy_sources test_var
copy_sources:
mkdir $(WORKDIR)
mkdir $(WORKDIR)/logs
@rsync -paqhC $(SRCDIR) $(WORKDIR)/
test_var:
cd $(WORKDIR)
for TESTDIR in $(wildcard $(WORKDIR)/$(SRCDIR)/*); do \
cd $$TESTDIR ; \
TESTNAME=`basename $$TESTDIR`; \
touch file_$${TESTNAME}_out.txt; \
echo "done $${TESTNAME}" > $(WORKDIR)/logs/$${TESTNAME}.log; \
cd $(WORKDIR); \
done
我调用的:
使所有SRCDIR =来源
这看起来有点令人费解,所以我想知道是否有办法使用Makefile语法而不是将它全部传递给shell。我特别难以将basename分配给变量然后使用该变量。