2015-05-11 107 views
2

我有3個文件應該包含在靜態庫(file1.c,file2.c,file3.c)中,還有一個文件應該包含main函數(main.c文件)和鏈接到靜態庫。同時爲靜態庫和可執行文件創建makefile

我想創建一個makefile來創建庫,然後創建可執行文件。

我的基本的Makefile:

CC=gcc 
CFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=file1.c file2.c file3.c 
OBJECTS=$(SOURCES:.c=.o) 
OUT=libctest.a 
EXECUTABLE=hello 
LDFLAGS = -static 

.c.o: 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

all: 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 

clean: 
    rm -f $(OBJECTS) $(OUT) 

圖書館創建,但可執行文件不創建(所有:(CC)-o $(可執行文件)的main.c $(OUT)) 任何想法需要什麼?

+0

(CC)-o $(EXECUTABLE)main.c $(OUT)這是你的問題或實際生成文件中的拼寫錯誤嗎?它應該是$ {CC} – sabbahillel

+0

這是一個錯字,不能用美元符號 – Moti

回答

2

Make將默認處理Makefile中的第一個目標。在你的情況下,這是.c.o目標。要製作all,默認目標將其移動到頂部。許多人更喜歡這樣一種風格,all不會做任何事情,而是依賴於其他人。這些行是:

all: $(EXECUTABLE) 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

$(EXECUTABLE): main.c $(OUT) 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 
all: $(EXECUTABLE) 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

$(EXECUTABLE): main.c $(OUT) 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 
+0

@Moti工作,也不要忘記在'clean'工件中添加'$(EXECUTABLE)'。 –

+0

謝謝,它的工作 – Moti

+0

只是爲了澄清:'.co'目標不被視爲makefile中的默認目標:make在makefile中選擇第一個_explicit_目標,'.co'是_suffix rule_這是一個隱式目標,所以它不算。正如你所預料的那樣,第一個明確的目標是'$(OUT)'或者'libctest.a'。 – MadScientist

相關問題