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也会抱怨在大多数情况下使用空格进行缩进。