制作和VPATH。为什么我的源文件放在我不想要的地方?

时间:2012-05-09 20:42:50

标签: makefile vpath

我正在尝试用make编译。我有源于两个目录,src和altsrc。我希望make首先在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 复制到我正在运行的目录中。这真的很烦人,后来会引起一堆混乱。我还没有找到任何说明这应该是VPATH宏的效果的文档。谁能告诉我如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

麻烦在于Make是精通RCS的,并且会检查源文件(例如td.f)是否可以并且应该从RCS更新。是的,Make知道如何使用co。如果源文件不在这样的存档中(例如altsrc中的源文件),那么Make shrugs并继续工作。

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

如果不这样做,您可以使用自己的无操作规则或使用实际更新源的规则覆盖该特定规则,或者您可以touch来源,以便Make不会认为它们已经过时,或者将RCS文件放在Make无法看到它们的位置,或者可能有两三个其他选项。