如何使用 makefile 包含 C 中另一个目录中的 .a 静态库和 .h 文件
how to use makefile to include .a static library and .h file from another directory in C?
我创建了一个.h
头文件,实现并创建了静态库文件.a
,它们都在目录中,例如/home/data/folder1
。
我还有另一个.c
文件,它将使用链接.h
头文件和.a
库文件。但是,.c
文件位于目录 /home/data/folder2
中。
我应该在生成文件(也位于/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 $@
相关文章:
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- Android 在编译二进制文件时重建静态库
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 我可以读取静态对象中的文件.txt吗?C++
- 复制文件流C++静态变量
- 调用在 HXX 文件中声明的静态数据成员
- 链接时,不同静态库中的同一对象文件
- 如何在 linux 可执行文件中使用静态库
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 在链接可执行文件之前查找静态库未解析的依赖项
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 访问从 CPP 文件到其他头文件的静态变量
- 无法将静态二进制文件链接到 #include
- 如何将 cpp 文件中的静态函数公开给其他文件
- 从 .so/.o 文件中获取 C/cpp 中的静态库列表
- 在C++中,关闭类成员函数内的静态文件流
- 将互斥对象声明为静态文件范围的变量是否安全