包括静态库和头文件Makefile问题(C)

Posted

技术标签:

【中文标题】包括静态库和头文件Makefile问题(C)【英文标题】:Including static library and header Makefile questions (C) 【发布时间】:2014-03-01 14:03:37 【问题描述】:

我的文件堆叠如下

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

运行“make”只会给我一堆隐式声明错误和未定义的引用,因为它没有查看我用 -L 和 -I 指定的路径。我的dependentfile.c 也有这一行

#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

【问题讨论】:

这可能吗? 你想在静态库中链接,但真的不想告诉 make 它是什么?你希望它如何工作? Make 做你告诉它做的事情。它不会去为你找到你的依赖——你必须告诉它它们是什么。虽然您更新了您的问题以说您已经弄清楚了,但您没有提到您意识到您对 make 的默认规则库的依赖。了解这一事实将大大有助于您了解正在发生的事情以及将来如何编写 Makefile。 【参考方案1】:

我认为你应该使用

#include "myheader.h"

你的头文件名应该被引用。

【讨论】:

以上是关于包括静态库和头文件Makefile问题(C)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode - 如何将 c 库和头文件包含到可可项目中?

xcode 在哪里保留其库和头文件的默认路径?

开源库的使用方法以及libjpeg的移植详解

linux下编译时的默认库和头文件搜索路径

编译器的工作流程

同时为静态库和可执行文件创建makefile