如何在C Makefile中使用外部库和头文件? [英] How to use external libraries and headers in C Makefile?
问题描述
我在目录1中有一个头文件myheader.h和一个静态库libmylib.a.在directory2中,我正在编写一个使用它们的程序.假设我在目录2中有main.c,该目录使用myheader.h和libmylib.a.如何创建Makefile进行编译和链接?
I have a header file myheader.h and a static library libmylib.a file in directory1. In directory2, I'm writing a program which uses them. Suppose I have main.c in directory2 which uses myheader.h and libmylib.a. How do I create a Makefile to compile and link them?
现在,在我的main.c中,我已经添加
Right now, in my main.c, I have added
#include "../directory1/myheader.h"
此刻是我的Makefile:
Here's my Makefile at the moment:
CC = gcc
INCLUDES = -I
CFLAGS = -g -Wall $(INCLUDES)
main: main.o ../directory1/libmylib.a
$(CC) main.o ../directory1/libmylib.a -o main
main.o: main.c ../directory1/myheader.h
$(CC) $(CFLAGS) -c main.c
我收到以下警告:
gcc -g -Wall -I -c main.c
/home/me/directory2/main.c:72: undefined reference to `foo'
collect2: ld returned 1 exit status
make: *** [main.o] Error 1
其中foo是库中的功能之一.
where foo is one of the functions in the library.
推荐答案
好.修复它.
我删除了 #include"../directory1/myheader.h"
,并将其替换为 #include"myheader.h"
.
I removed #include "../directory1/myheader.h"
and replaced it with #include "myheader.h"
.
然后在Makefile中使用:
Then in the Makefile, I used:
CC = gcc
INCLUDES = -I../directory1
CFLAGS = -g -Wall $(INCLUDES)
LDFLAGS = -L../directory1
main: main.o ../directory1/libmylib.a
$(CC) main.o $(LDFLAGS) -lmylib -o main
main.o: main.c ../directory1/myheader.h
$(CC) $(CFLAGS) -c main.c
这篇关于如何在C Makefile中使用外部库和头文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!