我是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)
我的问题是我得到了错误
如果我从
SRCS
删除文件,则IState.d
会出现问题。构建正确的所有其他.d文件(共11个)。所有文件都存在,并且被正确写入(区分大小写)。
我不知道错误可能在哪里,我现在搜索了2个小时。
任何帮助都会很棒。
最好的祝福
亚历克斯
最佳答案
你包括
$(SRCS:.h=.d)
即在本地目录中名为
whatever.d
的文件;但是你有一个规则要制定$(SRC_DIR)$(SRCS:.h=.d)
即名为
src/whatever.d
的文件。您需要确定这些文件应该存放在哪里,并使两个规则匹配。