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将有很大帮助。 –