2

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

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不工作

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

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

4

3 回答 3

3

当你写:

all: item1 item2

然后请求make all,它告诉make

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

使用建议.PHONY: all item1 item2对 GNU Make 有好处;它不适用于make.

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

于 2009-02-25T13:57:02.453 回答
1

尝试虚假声明您的所有目标。

于 2009-02-25T13:35:18.667 回答
0

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

-"all" 是一个目录@ $(HOME)/apps -all1/2/3: item1 item2 works -all: item1 item2 不起作用,任何与目录同名的目标名称也是如此。

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

于 2009-02-25T13:48:15.127 回答