Makefile:没有规则来制作目标。停止
Posted
技术标签:
【中文标题】Makefile:没有规则来制作目标。停止【英文标题】:Makefile: No rule to make target. Stop 【发布时间】:2013-11-27 10:14:17 【问题描述】:我是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 文件(12 个中的 11 个)。
所有文件都存在且写入正确(区分大小写)。
我不知道错误可能出在哪里,我现在搜索了 2 个小时。
任何帮助都会很棒。
最好的问候 亚历克斯
【问题讨论】:
【参考方案1】:你包括
$(SRCS:.h=.d)
即本地目录中名为whatever.d
的文件;但是你有一个规则要制定
$(SRC_DIR)$(SRCS:.h=.d)
即名为src/whatever.d
的文件。
您需要决定这些文件应该放在哪里,并使两个规则匹配。
【讨论】:
【参考方案2】:确保您使用制表符进行缩进。这种神秘的失败通常是由于使用了空格造成的,make不支持。
【讨论】:
这个答案应该是评论。在大多数情况下,Make 还会抱怨使用空格进行缩进。以上是关于Makefile:没有规则来制作目标。停止的主要内容,如果未能解决你的问题,请参考以下文章
autotools -- make[1]: *** 没有将目标设为“全部”的规则。停止
make: *** 没有指明目标并且找不到 makefile。 停止
make: *** 没有指定目标,也没有找到 makefile。停止
make: *** 没有指明目标并且找不到 makefile。 停止。