如何使用makefile在C中的另一个目录中包含.a静态库和.h文件?

CTo*_*end 3 c c++ makefile

我创建了一个.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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,提前感谢!

gre*_*ade 7

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

你有包含库的目录和包含头的目录的路径,所以我们将它们存储在变量中:

LIBB = /home/data/folder1
LIBINCLUDE = /home/data/folder2
Run Code Online (Sandbox Code Playgroud)

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

CFLAGS += -I$(LIBINCLUDE)
LDFLAGS += -L$(LIBB)
Run Code Online (Sandbox Code Playgroud)

它将使用CFLAGSLDFLAGS自动,如果你不明确的运行GCC.

但是对于链接步骤,它需要知道需要库,因此:

LDFLAGS += -static -lmylib
Run Code Online (Sandbox Code Playgroud)

链接器将libmylib.a-L选项中指定的所有目录中查找LDFLAGS.

由于你的规则mainmain.o是明确的,改变他们像这样(但一定要使用标签,而不是4个空格):

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

main.o: main.c
    gcc $(CFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)