2012-08-03 82 views
8

每次我想使用庫執行程序時,我必須在終端上運行這4個命令。Makefile文件庫

的線是

cc -m32 -c mylib.c 
ar -rcs libmylib.a mylib.o 
cc -m32 -c prog.c 
cc -m32 prog.o -L. -lmylib 
./a.out 

我如何作出上述命令生成文件並運行它? 一個詳細的程序將不勝感激。謝謝。


編輯: 這裏是解決方案:

a.out: prog.o libmylib.a 
     cc prog.o -L. -lmylib 

prog.o: prog.c mylib.h 

libprint_int.a: mylib.o 
     ar -rcs libmylib.a mylib.o 

print_int.o: mylib.c mylib.h 

clean: 
     rm a.out prog.o libmylib.a mylib.o 

這給了第2行的錯誤,因爲我用空格代替標籤。

+3

這裏有一點冗餘。使用靜態庫時,如果只將'.o'文件直接鏈接到應用程序中,而不是先將它們填充到'.a'文件中,則會得到相同的結果。畢竟,靜態庫只不過是粘在一起的一堆'.o'文件。 – 2012-08-03 07:52:49

回答

7

喜歡的東西:

program_NAME := a.out 

SRCS = mylib.c prog.c 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o 
    cc -m32 prog.o -L. -lmylib 

可能讓你開始

纔剛剛開始使用的makefile自己,我認爲他們是非常棘手,但一旦你讓他們的工作,他們讓生活變得更加簡單(這的人概率充滿錯誤的,但一些更經歷了這麼民間將概率能夠幫助解決這些問題)

至於運行時,請務必將文件保存爲「Makefile文件」(大小寫很重要)

然後從CMD線(確保你包含Makefile文件cd到DIR):

$ make 

完蛋了!

UPDATE

如果中間靜庫是多餘的,你可以用一個Makefile這樣跳過它:

program_NAME := a.out 

SRCS = mylib.c prog.c 
OBJS := ${SRCS:.c=.o} 

CFLAGS += -m32 

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS := 
program_LIBRARIES := mylib 

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir)) 
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library)) 

CC=cc 

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME) 
+0

以上Makefiles都不起作用。 – 2012-08-03 15:26:36

+0

它給出錯誤Makefile:25:***缺少分隔符。停止。 爲第二個和Makefile:10:***缺少分隔符。停止。 第一個 – 2012-08-03 15:28:24

+0

請回答這個 – 2012-08-03 15:32:31

0

我認爲沒有更詳細的過程比make命令的官方文檔:http://www.gnu.org/software/make/manual/make.html#Overview

基本上,你必須創建一個目標,只是把你的命令在裏面。如果你想讓它在你輸入'make'時工作,那麼目標可以是'all'。一個好的makefile肯定會使用變量等來保持lib/sources的靈活性。

1

最簡單的教程,瞭解使文件在Cprogramming.com可用。一旦你瞭解了它,那麼你可以通過make file手冊。

+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/19056300) – NaN 2018-03-09 12:20:06