Makefile:没有规则做目标。 停止

我是Makefile新手。 我必须编写一个Makefile来构build一个共享库。

 CC =g++ CFLAGS =-fPIC -Wall -Wextra -c LDFLAGS =-shared RM =rm -rf TARGET_LIB =lib/Automat.so SRC_DIR =src/ LIB_DIR =lib/ DEP_DIR =dep/ SRCS=IFSM.h IState.h ITransition.h FSM.h State.h Transition.h Wildcard.h PrimeTransition.h SingleTransition.h Exception.h Type.h Error.h OBJS=$(SRCS:.h=.o) .PHONY: all all: $(TARGET_LIB) $(TARGET_LIB): $(SRC_DIR)$(OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(SRC_DIR)$(SRCS:.h=.d):%.d:$(SRC_DIR)%.h $(CC) $(CFLAGS) -MM $< > $(DEP_DIR)$@ include $(SRCS:.h=.d) 

我的问题是,我得到的错误

目标没有规则`IFSM.d'。 停止。

如果我删除从IState.d文件IState.d发生问题。 所有其他.d文件正确build立(11 12)。

所有文件都存在,并且它们被写入正确(区分大小写)。

我真的不知道错误在哪里,我现在正在寻找2个小时。

任何帮助将是伟大的。

最好的问候Alex

Solutions Collecting From Web of "Makefile:没有规则做目标。 停止"

你在包括

 $(SRCS:.h=.d) 

即在本地目录中调用whatever.d的文件; 但你有一个规则要做

 $(SRC_DIR)$(SRCS:.h=.d) 

也就是名为src/whatever.d文件。

您需要决定这些文件应该在哪里生存,并使两个规则匹配。

确保您使用制表符缩进。 这种神秘的失败通常是由使用空格造成的,而这些空格不被make支持。