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