2013-11-27 132 views
1

我是Makefile的新用戶。我必須編寫一個Makefile來構建一個共享庫。Makefile:無法制定目標。 Stop

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 [email protected] $^ 

$(SRC_DIR)$(SRCS:.h=.d):%.d:$(SRC_DIR)%.h 
    $(CC) $(CFLAGS) -MM $< > $(DEP_DIR)[email protected] 

include $(SRCS:.h=.d) 

我的問題是,我得到的錯誤

沒有規則,使目標`IFSM.d」。停止。

如果我從SRCS刪除文件,IState.d發生問題。所有其他.d文件,其中builded正確(11 12)。

所有文件都存在,它們被寫入正確(區分大小寫)。

我真的不知道錯誤在哪裏,我現在正在尋找2個小時。

任何幫助將是偉大的。

問候 亞歷

回答

0

確保你使用製表符縮進。這種神祕的失敗通常是由於使用空格而導致的,make並不支持這些空格。

+0

此答案應該是一條評論。另外Make會抱怨在大多數情況下使用空格進行縮進。 – Snps

2

要包括

$(SRCS:.h=.d) 

即文件在本地目錄中稱爲whatever.d;但是你有一個規則可以製作

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

即文件名爲src/whatever.d

您需要決定這些文件應該在哪裏生存,並使兩個規則匹配。