2014-01-30 16 views
1

試圖編譯朋友的代碼 - 但他沒有包含Makefile,我自己構建並且感到困惑由我遇到的一個問題。Makefiles - ar:* .a:沒有這樣的文件或目錄....但是有...它就在那裏

我認爲這是最好的我發佈下面的Makefile的全部內容...我試圖保持它的簡短!

CFLAGS = -Wall -pedantic 
LFLAGS = 
CC  = gcc 
RM  = /bin/rm -rf 
AR  = ar rc 
RANLIB = ranlib 

LIBRARY = const.a read.a descr.a 

LIB_SRC = read.c futex.c testy.c 

LIB_OBJ = $(patsubst %.c,%.o,$(LIB_SRC)) 

# pattern rule for object files 
%.o: %.c 
     $(CC) -c $(CFLAGS) $< -o [email protected] 

all: $(LIBRARY) 

$(LIBRARY): $(LIB_OBJ) 
     $(AR) $(LIBRARY) $(LIB_OBJ) 
    $(RANLIB) $(LIBRARY) 

clean: 
    $(RM) $(LIBRARY) $(LIB_OBJ) 

.PHONY: depend 
depend: 
     $(CFLAGS) -- $(LIB_SRC) 2>/dev/null 

所有的文件,const.h,read.h和descr.h都在我調用make的目錄中。對於read.c,futex.c和testy.c也是如此。

這些文件以各種方式糾纏 - 如果我需要準確地展示這些糾纏的性質,我會這樣做。

我「製作」和編譯器alledges:

ar: read.a: No such file or directory 

難道不是read.a是應該正在生產的情況?當然,它還沒有。

我已經盯了一會兒,我覺得這一定是簡單的我想念的東西。

+1

下次使用'make V = 1';) – user2485710

+0

'LFLAGS'?你在makefile中使用'lex'嗎? –

回答

3

此命令:

$(AR) $(LIBRARY) $(LIB_OBJ) 

擴展到這一點:

ar rc const.a read.a descr.a read.o futex.o testy.o 

所以當make試圖建立const.a,它告訴ar幾個文件合併成const.a,從read.aar抱怨沒有這樣的文件。 (無論ar可以做任何有用的事情與read.a如果它確實存在是無關緊要的。)

目前還不清楚要如何讓構建這些庫,但是這可能是朝着正確方向邁出的一步:

$(LIBRARY): $(LIB_OBJ) 
    $(AR) [email protected] $(LIB_OBJ) 
    $(RANLIB) [email protected] 

automatic variable[email protected]擴展爲目標的名稱。您可以使用另一個作爲先決條件列表($(LIB_OBJ)),但我們一次嘗試一件新事物。

相關問題