【问题标题】:make simple file copying yields "Nothing to be done"进行简单的文件复制会产生 \"Nothing to be done\"
【发布时间】:2022-11-04 00:54:48
【问题描述】:

我试图简单地复制使用 make 修改的文件。这是整个 Makefile:

FILES = www/foo.html www/bar.html www/zap.php

all: $(FILES)

$(FILES): src/$@
    cp src/$@ $@

clean:
    rm $(FILES)

修改文件src/www/bar.html后,make不会复制该文件:

$ make
make: Nothing to be done for 'all'.
$ make www/bar.html
make: 'www/bar.html' is up to date.

为什么 make 看不到先决条件已被修改并且需要复制文件?

如果我运行 make clean, make 它可以工作(复制所有文件)。

【问题讨论】:

  • $@$< 等自动变量只有值在食谱中.它们在先决条件列表中没有特殊价值。因此,src/$@ 扩展为仅 src/ 作为先决条件,因为 $@ 变量为空。

标签: makefile


【解决方案1】:

src/$@ 定义不明确。你要

$(FILES): %: src/%

它声明了一个模式规则,并将其范围限制为$(FILES) 中的文件。 (您可能想要甚至需要删除此限制。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2014-08-27
    相关资源
    最近更新 更多