5

我创建了一个.h头文件,实现并创建了.a静态库文件,它们都在/home/data/folder1.

我有另一个.c文件将使用链接.h头文件和.a库文件。但是,该.c文件位于目录中/home/data/folder2

我应该在 Makefile(也位于/home/data/folder2)中写什么?另外,我应该包含myheader.h.c我要编译的文件中吗?这是我到目前为止所拥有的,但没有工作:

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

任何帮助将不胜感激,在此先感谢!

4

1 回答 1

8

包括来自非标准目录的头文件和库很简单。

您有包含库的目录和包含标头的目录的路径,因此我们将它们存储在变量中:

LIBB = /home/data/folder1
LIBINCLUDE = /home/data/folder2

现在 GCC 需要知道在哪里寻找头文件,所以我们只需将它包含在CFLAGS. 链接器(而不是编译器)需要知道在哪里寻找库,所以我们可以将其添加到LDFLAGS

CFLAGS += -I$(LIBINCLUDE)
LDFLAGS += -L$(LIBB)

如果您没有明确运行 GCC ,它将自动使用CFLAGSand 。LDFLAGS

但是对于链接步骤,它需要知道需要该库,所以:

LDFLAGS += -static -lmylib

链接器将libmylib.a在所有由-L选项命名的目录中查找LDFLAGS.

由于您的main和规则main.o是明确的,因此请像这样更改它们(但请务必使用制表符,而不是 4 个空格):

main: main.o
    gcc $(LDFLAGS) $< -o $@

main.o: main.c
    gcc $(CFLAGS) $< -o $@
于 2013-10-13T03:09:44.883 回答