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

C++ 如何使用makefile在C中包含一个静态库和另一个目录中的.h文件?,c++,c,makefile,C++,C,Makefile,我已经创建了一个.h头文件,实现并创建了.a静态库文件,它们都位于目录中,比如说,/home/data/folder1 我还有另一个.c文件,它将使用.h头文件和.a库文件的链接。但是,.c文件位于目录/home/data/folder2中 我应该在Makefile(也位于/home/data/folder2中)中写什么?另外,我是否应该在要编译的.c文件中包含myheader.h?以下是迄今为止我所拥有的,但不起作用的: LIBB = -L/home/data/folder1/libmylib

我已经创建了一个
.h
头文件,实现并创建了
.a
静态库文件,它们都位于目录中,比如说,
/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=-L/home/data/folder1/libmylib.a
HEADER=-L/home/data/folder2/myheader.h
main:main.o
gcc$(页眉)$(LIBB)$<-o$@
main.o:main.c
gcc-cmain.c
.假冒:干净
清洁:
rm-f*.o*.a.out干管

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

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

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

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

谢谢!但是,呃……如果我的头和库在同一个目录中,而.c文件在另一个目录中呢?我应该做同样的事情吗?同时,我是否必须在.c文件中写入#include“myheader.h”?谢谢您可能需要添加
-I.
-L.
,但过程都是一样的。但是
main
main.o
的两个规则都可以安全地退出
gcc
行,它会做正确的事情。另外,是的,您确实需要在
.c
文件中有一个适当的
#include
指令。
main: main.o
    gcc $(LDFLAGS) $< -o $@

main.o: main.c
    gcc $(CFLAGS) $< -o $@