我创建了一个.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)
任何帮助将不胜感激,提前感谢!
包括来自非标准目录的头文件和库很简单.
你有包含库的目录和包含头的目录的路径,所以我们将它们存储在变量中:
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)
它将使用CFLAGS和LDFLAGS自动,如果你不明确的运行GCC.
但是对于链接步骤,它需要知道需要库,因此:
LDFLAGS += -static -lmylib
Run Code Online (Sandbox Code Playgroud)
链接器将libmylib.a在-L选项中指定的所有目录中查找LDFLAGS.
由于你的规则main和main.o是明确的,改变他们像这样(但一定要使用标签,而不是4个空格):
main: main.o
gcc $(LDFLAGS) $< -o $@
main.o: main.c
gcc $(CFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18638 次 |
| 最近记录: |