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