符号链接Makefile中的先决条件没有check-symlink-times

时间:2010-12-02 11:51:10

标签: makefile symlink

我的项目使用来自外部供应商的静态库libext.a。 该库保存在所有项目开发人员central/之间共享的中心位置,并且随着库的每个更新版本,添加了具有当前版本后缀的新文件:central/libext.a.1,{ {1}},central/libext.a.2,...

项目的Subversion存储库包含一个符号链接central/libext.a.3,指向libext.a中库的最新版本。每当添加新版本时,链接都会更改并提交到存储库。

问题是,在更改链接并更新工作副本后重新编译项目时,central会查看链接目标的修改时间,而不是链接本身的修改时间({{ 1}})。因此,在编译项目中使用的库仍然是旧版本。

我知道自版本3.81以来 GNU Make 中可用的make / libext.a标志,这使得-L查看两者的修改时间链接的目标和链接本身,但我的项目使用版本3.80,并且升级将非常困难,因为必须在许多不同的机器上支持编译,其中一些我无法控制。

在我的旧版--check-symlink-times中模拟此新旗帜行为的最简单方法是什么? 我更喜欢可以在特定Makefile中本地化并在其中实现的内容,而不是必须在运行make之前运行的脚本或必须使用它指定的命令行选项,尽管这不是完全不可接受的

2 个答案:

答案 0 :(得分:1)

也许您可以使用类似于here概述的技术,这是在文件校验和更改时让gmake重建的技巧,而不是简单地在时间戳更改时。

答案 1 :(得分:0)

到目前为止,我提出的最佳解决方案是在需要libext.a.timestamp的Makefile中添加libext.a作为要求,并将其添加为具有{{1的规则的先决条件作为先决条件。

另外,我添加了一条规则:

libext.a

现在我需要找到一种方法来在链接更新时触摸时间戳。不幸的是,我还没有办法做到这一点(SVN中没有更新后的钩子)......