2014-03-01 41 views
0

我的文件堆疊是如下包括靜態庫和頭Makefile的問題(C)

dir1/ 
    mylib.a 
    myheader.h 
    file.c 
    executable 
dir2/ 
    dependentfile.c // depends on functions in myheader.h implemented in mylib.a 

我想鏈接我的靜態庫文件在我的Makefile文件,而不需使用的名稱,而只是表明它的路徑。我有如下:

爲DIR2 Makefile文件/

CC = gcc 
CFLAGS = -g -Wall $(INCLUDES) 
INCLUDES = -I../dir1 
LDFLAGS = -g -L../dir1 

exec: dependentfile.o 

dependentfile.o: dependentfile.c 

運行「製作」只是給了我一堆的隱式聲明的錯誤,並未定義的引用,因爲它不是在我與指定的路徑中尋找-L和-I。我的依賴文件也有行

#include "myheader.h" 

它找不到。

我應該如何修改makefile才能使其工作?我已經嘗試了多種方法,甚至用-l指定lib文件並寫入完整的路徑來無濟於事。

任何幫助表示讚賞!

編輯:想通了!

原來我忘了LDLIBS。因此,對於其他人,makefile文件最終看上去像:

CC = gcc 
CFLAGS = -g -Wall $(INCLUDES) 
INCLUDES = -I../dir1 
LDFLAGS = -g -L../dir1 
LDLIBS = -lmylib (my actual file was named libmylib.a, forgo the "lib") 

exec: dependentfile.o 

dependentfile.o: dependentfile.c 
+0

這甚至可能嗎? – Claudiordgz

+0

你想鏈接一個靜態庫,但真的不想告訴做它是什麼?你期望如何工作? Make做你告訴它做的事。它不會去尋找你的依賴 - 你必須告訴它它是什麼。 雖然你更新了你的問題,說你已經知道了,但是你沒有提到你已經意識到你對make的默認規則庫的依賴。 瞭解這一事實對於您瞭解將來如何編寫Makefiles以及如何編寫Makefiles將有很大幫助。 –

回答

0

我認爲你應該使用

#include "myheader.h" 

你的頭文件名應該被引用。

+0

哦,我是。我將編輯上面的問題。 – user2799712