我有一个makefile for Advent of Code,我决定在鸡的方案中这样做。
然而,它开始增长,我想删除重复的内容。
这是我到目前为止所获得的一部分,但是我如何使它能够自动查找所有天,而不是每天2个条目,并且主要目标不断增加?
all: advent2015
# advent years - this is ever increasing with the *.so targets
advent2015: $(ADVENTS_SRC)2015/advent2015.scm \
aoc2015day01.so aoc2015day02.so
$(CSC) $(INCLUDE_FLAGS) $< -d3 -O2 -compile-syntax -o $@
# individual days - how do i write a single rule that works for all days?
aoc2015day01.so: $(ADVENTS_SRC)2015/aoc2015day01.scm aoc-files.so
$(CSC) $(INCLUDE_FLAGS) $(LIBFLAGS) $< -j aoc2015day01 -emit-types-file aoc2015day01.types -o $@
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) aoc2015day01.import.scm
aoc2015day01.import.so: aoc2015day01.so
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) aoc2015day01.import.scm
# day02...
aoc2015day02.so: $(ADVENTS_SRC)2015/aoc2015day02.scm aoc-files.so
$(CSC) $(INCLUDE_FLAGS) $(LIBFLAGS) $< -j aoc2015day02 -emit-types-file aoc2015day02.types -o $@
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) aoc2015day02.import.scm
aoc2015day02.import.so: aoc2015day02.so
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) aoc2015day02.import.scm我尝试通过在so文件中指定一个通配符来更改advent2015目标,但完全跳过了生成目标的过程。
发布于 2021-09-02 15:17:31
没问题:
DAYS := 01 02 03 04 <...> 24 25
all: advent2015
advent2015: $(ADVENTS_SRC)2015/advent2015.scm \
$(foreach D,$(DAYS),aoc2015day$(D).so)
$(CSC) $(INCLUDE_FLAGS) $< -d3 -O2 -compile-syntax -o $@
%.so: $(ADVENTS_SRC)2015/%.scm aoc-files.so
$(CSC) $(INCLUDE_FLAGS) $(LIBFLAGS) $< -j $* -emit-types-file $*.types -o $@
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) $*.import.scm
%.import.so: %.so
$(CSC) $(INCLUDE_FLAGS) $(IMPORTFLAGS) $*.import.scm我不确定这些命令实际上是正确的,但它们是您在上面提供的,所以如果不正确,您可以修复它们。
发布于 2021-09-02 12:38:43
您可能会发现csm egg很有用。我知道这意味着摆脱你的makefile,但它应该更容易做到这一点。
或者,beaker提供了基于.egg文件的构建方法,就像chicken-install使用的那些文件一样。
https://stackoverflow.com/questions/69029464
复制相似问题