如果 foo_user.cpp 依赖于 foo.h,则构建 foo_user.cpp,然后将 foo.h 的修改时间设置为更远的过去,make 不会重新构建 foo_user.cpp(因为 foo.cpp 是“较新的”)。如果 make 记录了依赖项的修改时间,并且如果它们完全改变(新的或旧的),我希望它认为该依赖项的目标已经过时。GNU 能做到这一点吗?如果没有,有没有简单的替代方案?
如果您好奇这种情况是如何产生的: foo.h 位于一个符号链接的文件夹中。符号链接可能指向傻瓜1.0 文件夹、傻瓜2.0 文件夹等。当符号链接指向不同版本的库时,即使是旧版本,也应该重建foo_user.cpp。如果我只是将 symlinkfolder/foo.h 指定为 foo_user.cpp 的依赖项,则 make 只关注 foo.h 的时间戳,而不是访问 foo.h 的符号链接目录的时间戳。我不能将符号链接本身添加为依赖项,因为 make 规则是由编译器生成的(GCC 有一个特殊的标志,当给定它时,它会为源文件所依赖的所有头文件输出一个 make 规则)。