是否可以使GNU Make遵循规则中的符号链接

时间:2019-02-16 18:25:24

标签: makefile gnu-make

我有一个使用GNU Make进行构建的大型项目。有些规则取决于符号链接,而其他规则的目标是符号链接引用的文件。

这是我正在谈论的一个简单示例:

# assume the following symlink exists s-b2 -> f-b2

f-b1 :
    touch f-b1

f-b2 : f-b1
    touch f-b2

f-b3 : s-b2
    touch f-b3

我看到的行为是取决于符号链接的最终规则未完全链接到较早的规则。例如。更新到较早的文件不会导致重新评估较新的规则。您可以查看此操作的详细失败信息,并通过this github project进行尝试。

在计算规则依赖性时,有什么方法可以告诉make遵循符号链接吗?

1 个答案:

答案 0 :(得分:0)

如果您不喜欢使用符号链接,可以尝试仅触摸链接吗?

all : f-b3

init : clean
        ln -s -f f-b2 s-b2

clean :
        -rm f-* s-*

f-b1 :
    touch f-b1 # not necessarily just touch in real makefile

f-b2 : f-b1
    touch f-b2

s-b2 : f-b2
    touch s-b2 # would be just this in real makefile

f-b3 : s-b2
    touch f-b3

示例结果:

$ make init
rm f-* s-*
ln -s -f f-b2 s-b2
$ make
touch f-b1
touch f-b2
touch s-b2
touch f-b3
$ touch f-b1
$ make
touch f-b2
touch s-b2
touch f-b3
$ touch f-b2
$ make
touch f-b3