GNU Make,在不存在时使用默认 settings/content 生成文件

GNU Make, generate file with default settings/content when absent

我希望 make 将文件从源代码树复制到 target/build 目录(如果它退出)或者生成一个 empty/default 文件(如果不退出) .

执行以下操作很容易:

target/settings.json: src/settings.json
        cp $? $@

src/settings.json:
        echo "default..." > $@

但这会用一个可能会无意中签入 RCS 的文件污染源存储库。

是否有一个简单的 make 规则可以在文件退出时复制文件,或者只使用来自其他来源的 command/copy 生成目标?

GNU-Make 特定的解决方案很好

您可以使用 $(wildcard) 检查文件是否存在,所以可能是这样的:

ifeq ($(wildcard src/settings.json),)
    SETTINGS = tmp/settings.json
else
    SETTINGS = src/settings.json
endif

target/settings.json: $(SETTINGS)
    cp $? $@

tmp/settings.json:
    echo "default..." > $@