我可以制作一个 Makefile,它的目标是处理目录中的所有源。
SOURCE_DIR := src
TARGET_DIR := target
SOURCES := $(wildcard $(SOURCE_DIR)/*)
$(TARGET_DIR)/%: $(SOURCE_DIR)/%
md5sum $^ > $@
all: $(SOURCES:$(SOURCE_DIR)/%=$(TARGET_DIR)/%)
这里的一个很好的优势是每个文件都是一个单独的目标,因此它们可以增量地同时处理。在这种情况下,并发部分很重要。
我正在尝试与 SBT 类似的东西,但发现它非常困难。Make 目标的 SBT 模拟被视为一项任务,因此我尝试创建一个任务来聚合可变数量的较小任务。
import org.apache.commons.codec.digest.DigestUtils
all <<= Def.task().dependsOn({
file(sourceDir.value).listFiles.map { source =>
val target = rebase(sourceDir.value, targetDir.value)(f)
Def.task {
IO.write(target, DigestUtils.md5Hex(IO.readBytes(source)))
}
}
}: _*)
我得到错误
`value` can only be used within a task or setting macro, such as :=, +=, ++=,
Def.task, or Def.setting
如何制作与我的 Makefile 类似的正确 SBT 构建文件,并具有动态数量的并发目标/任务?