0

我正在尝试使用 make 进行编译。我在两个目录中有源代码,src 和 altsrc。我想先在 altsrc 中查找源文件,然后在 src 中查找。我希望对象进入目录 obs。我的 Makefile 的相关部分如下所示: VPATH=altsrc:src:obj

$(A_OUT): $(OBS)
    $(FORTRAN) -o $(A_OUT) $(OBS) $(LFLAGS)

obs/%.o: %.f
    $(FORTRAN) $(FFLAGS) $< -o $@

这个 Makefile 实际上可以编译代码,但它有一个非常令人讨厌的副作用:它找到每个源文件(并且有很多)并将它们从 altsrc 或 src 复制到我正在运行的目录中 make。这真的很烦人,并在以后导致一堆混乱。我在任何地方都没有找到任何说明这应该是 VPATH 宏的影响的文档。谁能告诉我如何解决这个问题?谢谢。

4

1 回答 1

0

问题是Make 是RCS 的,并且会检查源文件(例如td.f)是否可以并且应该从RCS 更新。是的,Make 知道如何使用co. 如果源文件不在此类存档中(例如 中的源文件altsrc),则 Make 耸耸肩并继续工作。

最快、最肮脏的解决方案是使用make -r. 这将禁用内置规则,这应该可以很好地解决问题......除非您依赖其他地方的内置规则。

如果这样做不行,您可以使用自己的无操作规则或使用实际更新现有源的规则来覆盖该特定规则,或者您可以touch使用源,以便 Make 不会将它们视为日期,或者将 RCS 文件放在 Make 看不到它们的地方,或者可能有两个或三个其他选项。

于 2012-05-09T21:39:38.647 回答