make 没有意识到相对路径名依赖与绝对路径名目标相同

use*_*763 3 gnu-make

以下是我遇到的问题的简化生成文件:

all: /tmp/makey/../filey
    @echo All done
/tmp/filey:
    @echo Filey
Run Code Online (Sandbox Code Playgroud)

当我运行 make 它说:

make-3.79.1-p7: *没有规则来制作目标/tmp/makey/../filey', needed by全部的。停止。

显然它没有意识到 /tmp/makey/../filey 与 /tmp/filey 相同。我有什么想法可以使这项工作?

谢谢

乔——穆拉里

Mad*_*ist 6

GNU化妆的较新版本有$(abspath ...)$(realpath ...)您可以应用到您的先决条件和目标函数来解决路径相同的字符串。如果您自己构造了这些名称(例如,$(PREFIX)/../filey),则可以$(dir $(PREFIX))filey改用。

除此之外,没有办法解决这个问题。Make 在目标上使用字符串匹配,如果字符串不相同,则它们不匹配(有一种特殊情况可以忽略简单前缀./)即使 make 理解了这种区别(通过将 abspath 本身应用于每个目标名称,也许)它也会例如,面对符号链接仍然无济于事。

唯一的“真正”答案是让 make 了解有关底层文件系统(例如设备 ID 和 inode)的一些信息,让您可以在不参考文件路径名的情况下谈论文件。但是,在像 make 这样的便携式程序中,这样做是有问题的。