加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 $@

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读