c – 如何使用makefile在C中的另一个目录中包含.a静态库和.h文件
发布时间:2020-12-16 09:48:04 所属栏目:百科 来源:网络整理
导读:我创建了一个.h头文件,实现并创建了一个静态库文件,它们都位于/ home / data / folder1目录中. 我有另一个.c文件,它将使用链接.h头文件和.a库文件.但是,.c文件位于目录/ home / data / folder2中. 我应该在Makefile中写什么(它也位于/ home / data / folder2
我创建了一个.h头文件,实现并创建了一个静态库文件,它们都位于/ home / data / folder1目录中.
我有另一个.c文件,它将使用链接.h头文件和.a库文件.但是,.c文件位于目录/ home / data / folder2中. 我应该在Makefile中写什么(它也位于/ home / data / folder2中)?另外,我应该在我要编译的.c文件中包含myheader.h吗?这是我到目前为止,但没有工作: LIBB = -L/home/data/folder1/libmylib.a HEADER = -L/home/data/folder2/myheader.h main: main.o gcc $(HEADER) $(LIBB) $< -o $@ main.o: main.c gcc -c main.c .PHONY: clean clean: rm -f *.o *.~ a.out main 任何帮助将不胜感激,提前感谢! 解决方法
包括来自非标准目录的头文件和库很简单.
你有包含库的目录和包含头的目录的路径,所以我们将它们存储在变量中: LIBB = /home/data/folder1 LIBINCLUDE = /home/data/folder2 现在GCC需要知道在哪里寻找标题,所以我们只需将其包含在CFLAGS中.链接器(不是编译器)需要知道在哪里查找库,因此我们可以将其添加到LDFLAGS: CFLAGS += -I$(LIBINCLUDE) LDFLAGS += -L$(LIBB) 如果您没有明确运行GCC,它将自动使用CFLAGS和LDFLAGS. 但是对于链接步骤,它需要知道需要库,因此: LDFLAGS += -static -lmylib 链接器将在LDFLAGS中的-L选项命名的所有目录中查找libmylib.a. 由于main和main.o的规则是显式的,因此请更改它们(但一定要使用制表符,而不是4个空格): main: main.o gcc $(LDFLAGS) $< -o $@ main.o: main.c gcc $(CFLAGS) $< -o $@ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |