C++ Makefile:没有用于生成目标的规则。停止

C++ Makefile:没有用于生成目标的规则。停止,c++,linux,makefile,C++,Linux,Makefile,我不熟悉Makefile。我必须编写一个Makefile来构建一个共享库 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 Pr

我不熟悉
Makefile
。我必须编写一个Makefile来构建一个共享库

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)
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)
冒牌货:全部
全部:$(目标库)
$(目标库):$(SRC\U目录)$(OBJS)
$(CC)$(LDFLAGS)-o$@$^
$(SRC_DIR)$(SRCS:.h=.d):%.d:$(SRC_DIR)%.h
$(CC)$(CFLAGS)-MM$<>$(副局长)$@
包括$(SRCS:.h=.d)
我的问题是我得到了错误

没有规则将目标设为“IFSM.d”。停下来

如果我从
SRCS
中删除到文件,则
IState.d
会出现问题。构建正确的所有其他.d文件(12个中的11个)

所有文件都存在且写入正确(区分大小写)

我不知道错误在哪里,我已经搜索了2个小时了

任何帮助都会很好

致意
Alex

请确保使用选项卡进行缩进。这种神秘的故障通常是由于使用了make不支持的空格造成的。

您正在使用空格

$(SRCS:.h=.d)
也就是说,本地目录中名为
which.d
的文件;但是你要制定一个规则

$(SRC_DIR)$(SRCS:.h=.d)
也就是说,名为
src/which.d
的文件


您需要决定这些文件的存放位置,并使两个规则匹配。

此答案应为注释。Make也会抱怨在大多数情况下使用空格进行缩进。