Makefile:没有规则来制作目标。停止

时间:2013-11-27 10:14:17

标签: 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 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'。停止。

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

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

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

任何帮助都会很棒。

祝你好运 亚历

2 个答案:

答案 0 :(得分:2)

你包括

$(SRCS:.h=.d)

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

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

即名为src/whatever.d的文件。

您需要确定这些文件应该存在的位置,并使两个规则匹配。

答案 1 :(得分:0)

确保使用标签进行缩进。这种神秘的失败通常是由使用空格引起的,而make不支持。