我面临着一个相当奇怪的问题。 我的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不允许与当前级别的某个目录具有相同名称的目标。观察:
all1: item1 item2
正常工作all: item1 item2
不起作用因此,任何与目录同名的目标名称似乎都失败了(因为没有做任何有用的事情)。
我很确定我在这里做了一些荒谬的错事。
答案 0 :(得分:3)
当你写:
all: item1 item2
然后请求make all
,告诉make
:
all
的文件系统对象,并确保它所依赖的任何内容(item1
,item2
)是最新的。all
不存在或已过时,则称为item1
或item2
的文件系统对象,然后执行指定的操作(本例中为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不起作用,因为任何目标名称与目录同名。
我很确定我在做任何荒谬的错误。