makefile的问题

我使用的是QNX6.2.1,按照hotplane的帖子
请教唐先生,在phab中编写callback函数,是不是一般用c来写
制作了makefile,但奇怪的是在执行

.PHONY : everything deps objs clean veryclean rebuild
everything : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
@$(RM-F) *.o
@$(RM-F) *.d
veryclean: clean
@$(RM-F) $(EXECUTABLE)
rebuild: veryclean everything

ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM-F) $(patsubst %.d,%.o,$@)
endif

出现了问题,敲入make之后,出错
make: test2.o: command not found
make: ***[test2.d] Error 127

当我注释掉
#ifneq ($(MISSING_DEPS),)
#$(MISSING_DEPS) :
#@$(RM-F) $(patsubst %.d,%.o,$@)
#endif
make通过,但是make clean的时候出错
/bin/sh: test1.o: not found
make: ***[clean] Error 127

其中test1.o代表第一个目标文件,test2.o代表最后一个目标文件

phab中makefile文件不是自动生成的吗?你为什么要自己写

phab的callback函数框架,是按C函数头自动生成的。

不好意思,是我弄错了,那篇帖子是
请问版主在qnx 6.3的集成开发环境下如和编写makefile???
我是使用的是QNX6.2.1标准版,利用ped+qcc来编程的.经过调试,我找出了问题的部分原因,我把我的makefile再写一遍

EXECUTABLE := zsjxh #name of ur application
LIBS :=
RM -F:=rm -f

Now alter any implicit rules’ variables if you like, e.g.:

CFLAGS := -g -w -O3
CXXFLAGS := $(CFLAGS)

You shouldn’t need to change anything below this point

SOURCE := $(wildcard *.c) $(wildcard *.cc)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) $(patsubst %.d,%.cc,$(MISSING_DEPS)))
CPPFLAGS += -M

.PHONY: all deps objs clean veryclean rebuild
all : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
**@$(RM -F) $(wildcard .o)
@$(RM -F) $(wildcard .d)

veryclean: clean
@$(RM -F) $(EXECUTABLE)
rebuild: veryclean all

ifneq ($(MISSING_DEPS), )
$(MISSING_DEPS) :
@$(RM -F) $(patsubst %.d,%.o,$@)
endif

-include $(DEPS)

$(EXECUTABLE) : $(OBJS)
@qcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))

出问题的是程序中的加粗部分,makefile不能把*.o解析成当前目录下的所有文件,必须通过$(wildcard *.o)的形式.

但问题还尚未完全解决:
1.改动之后,make clean时@$(RM -F) $(wildcard *.d) 又出了错,错误原因是rm命令之后没有参数,这说明就不存在.d文件,可是.o文件为什么存在呢?是哪行语句生成的呢?
2.加粗的第二部分,也就是条件判断部分,意思是如果.d文件不存在,那么删除.d对应的.o文件,但是加上它之后,结果就是makefile失去了作用,每次make都要重新编译连接.去掉之后就好了,不知是为什么.