gnu make的依赖问题

时间:2009-02-25 13:23:42

标签: dependencies makefile gnu

我面临着一个相当奇怪的问题。 我的make文件包含:

all: item1 item2

item1: dep1 dep2
dep1:
    @echo
    cd $(HOME)/apps; /bin/rm -f $(D_ALL_OBJECTS) 
    cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D_ALL_OBJECTS)
    @echo
dep2:
    @echo
    cd $(HOME)/apps; /bin/rm -f $(D2_ALL_OBJECTS) 
    cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D2_ALL_OBJECTS)
    @echo
item2: ...
.....

现在,“make -f Makefile item1”有效,但当我尝试“make -f Makefile all”时,它无效。你们在makefile中看到任何问题吗?

谢谢


附录

好吧,看起来make不允许与当前级别的某个目录具有相同名称的目标。观察:

  • “all”是一个目录@ $(HOME)/ apps
  • all1: item1 item2正常工作
  • all: item1 item2不起作用

因此,任何与目录同名的目标名称似乎都失败了(因为没有做任何有用的事情)。

我很确定我在这里做了一些荒谬的错事。

3 个答案:

答案 0 :(得分:3)

当你写:

all: item1 item2

然后请求make all,告诉make

  • 找到名为all的文件系统对象,并确保它所依赖的任何内容(item1item2)是最新的。
  • 如果all不存在或已过时,则称为item1item2的文件系统对象,然后执行指定的操作(本例中为none),然后考虑all最新。
  • 如果all是目录,则它存在。如果它最近被修改过,它将是最新的。

使用.PHONY: all item1 item2的建议对GNU Make有好处;它不适用于make的其他变体。

不要使用目录名称作为目录名称 - 除非您确定知道自己在做什么。并使用.PHONY

答案 1 :(得分:1)

尝试phony-declaring你的所有目标。

答案 2 :(得分:0)

看起来make似乎不允许与当前级别的某个目录具有相同名称的目标。 观察:

- “all”是@ $(HOME)/ apps目录 -all1 / 2/3:item1 item2有效 -all:item1 item2不起作用,因为任何目标名称与目录同名。

我很确定我在做任何荒谬的错误。