C makefile RE:构建依赖项以在各自的目录中正确查找对象

时间:2013-12-21 01:35:16

标签: c makefile gnu-make

我有一个C项目的Makefile。我有一个目录中的src,因为src中的子目录中有一些源代码。包含在src中的包含目录。

在Makefile中,我使用以下命令为.c源文件生成依赖关系信息:

%.o: %.c
    CFLAGS="$(CFLAGS)"
    $(CC) -c $(CFLAGS) $(STACK_OPTS) $(SIO_FLAGS) $(IO_FLAGS) $(LOCAL_INCLUDES) -DSYNC_WRITE $<
    $(CC) -MM $(CFLAGS) $(LOCAL_INCLUDES)  $^ > $*.d
    @cp -f $*.d $*.d.tmp
    @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
      sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
    @rm -f $*.d.tmp

这很好用......但是,我发现src的sub-dir中的那些源文件将其.d和.o文件存放在主src目录INSTEAD中,并将它们放入源文件所在的目录。

我尝试使用宏$(&lt; D)来尝试存储对象(.o)和依赖文件(.d),将目录名称放在它们应该的位置,但是当链接阶段发生时,它是找不到这个目录中的文件。

我有一个名为。

的目录的VPATH设置

关于我在这里缺少什么的想法?

1 个答案:

答案 0 :(得分:1)

默认情况下,VPATH会将所有目标放入当前工作目录。 VPATH的标准用途是您拥有只读源目录并且希望在其他位置构建对象的模式;例如,您需要使用不同的标志或其他任何方式编译多次。然后将对象目录设置为当前目录并运行makefile,以便它找到具有VPATH的源。

如果您希望目标与先决条件位于同一目录中,则可以将GPATH用于VPATH使用;有关详细信息,请查看GNU make手册。