以下是我遇到的问题的简化生成文件:
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 相同。我有什么想法可以使这项工作?
谢谢
乔——穆拉里
GNU化妆的较新版本有$(abspath ...)和$(realpath ...)您可以应用到您的先决条件和目标函数来解决路径相同的字符串。如果您自己构造了这些名称(例如,$(PREFIX)/../filey),则可以$(dir $(PREFIX))filey改用。
除此之外,没有办法解决这个问题。Make 在目标上使用字符串匹配,如果字符串不相同,则它们不匹配(有一种特殊情况可以忽略简单前缀./)即使 make 理解了这种区别(通过将 abspath 本身应用于每个目标名称,也许)它也会例如,面对符号链接仍然无济于事。
唯一的“真正”答案是让 make 了解有关底层文件系统(例如设备 ID 和 inode)的一些信息,让您可以在不参考文件路径名的情况下谈论文件。但是,在像 make 这样的便携式程序中,这样做是有问题的。
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |