2014-03-01 30 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