我正在尝试构建目标文件(使用GNU make),如果它的任何周围文件(同一目录中相同类型的文件)已更改。这似乎很简单,但我找不到解决方案。以下是该makefile的关键行:
dir/%.Rd: file1 file2 dir/*.Rd
...
/dir
中包含40-50 * .Rd文件(包括%.Rd
)。虽然make
会自动删除循环依赖项(上面的代码确实有效),但我想根据自身删除%.Rd
的循环。我试过了:
1)
dir/%.Rd: file1 file2 $(filter-out %, dir/*.Rd) # doesn't work; likely because % doesn't have meaning at this point -- second expansion
...
2)
dir/%.Rd: file1 file2 $(filter-out $@, dir/*.Rd) # doesn't appear to work: circular dependency warning
...
3)
dir/%.Rd: file1 file2 $$(filter-out $$@, dir/*.Rd) # same
...
4)
.SECONDEXPANSION:
dir/%.Rd: file1 file2 $$(filter-out $$@, dir/*.Rd) # same
...
这似乎是一个相对简单的问题,我确信我很接近。非常感谢任何解决方案/建议/解决方法。
提前致谢...
答案 0 :(得分:0)
这可能是做你想做的最不可怕的方式:
RD := $(wildcard *.Rd)
ifneq ($(TARG),)
RD := $(filter-out $(TARG),$(RD))
$(TARG): $(RD)
do something to update $@
endif
rebuild_%:
@$(MAKE) $*.rd TARG=$*.Rd
现在make rebuild_myfile
将更新myfile.Rd
当且仅当它不是目录中最新的Rd
文件时,才会有循环依赖。