makefile 包含静态库 - C
makefile include static library - C
我有 2 个项目。
第一个有 4 个文件:
1. main.c(其中包括PNM.h)
2. PNM.c(其中包括PNM.h)
3. PNM.h
4. 生成文件
CC=gcc
LD=gcc
CFLAGS=--std=c99 -Wall -W -Wmissing-prototypes
LDFLAGS=
DOXYGEN=doxygen
RM=rm
AR=ar
RANLIB=ranlib
all: pnm
lib: PNM.o
@$(AR) ru libpnm.a PNM.o
@$(RANLIB) libpnm.a
pnm: main.o PNM.o
@$(LD) -o $@ $^ $(LDFLAGS)
main.o: main.c PNM.h
@$(CC) -o $@ -c main.c $(CFLAGS)
PNM.o: PNM.c PNM.h
@$(CC) -o $@ -c PNM.c $(CFLAGS)
clean:
@$(RM) -rf *.o
allclean: clean
@$(RM) -rf pnm
@$(RM) -rf libpnm.a
这个项目运行完美。
在我的第二个项目中,我有 6 个文件和 libpnm.a:
1. libpnm.a
2. main.c(包括matricules.h)
3. matricules.c(包括matricules.h和codebarre.h)
4.matricules.h
5. codebarre.c(包括codebarre.h和PNM.h)
6.codebarre.h
7. 生成文件
CC=gcc
LD=gcc
CFLAGS=--std=c99 -Wall -W -Wmissing-prototypes
LDFLAGS=
DOXYGEN=doxygen
RM=rm
all: codebarre
codebarre: main.o matricules.o codebarre.o libpnm.a
@$(LD) -o $@ $^ $(LDFLAGS)
main.o: main.c matricules.h
@$(CC) -o $@ -c main.c $(CFLAGS)
matricules.o: matricules.c matricules.h codebarre.h
@$(CC) -o $@ -c matricules.c $(CFLAGS)
codebarre.o: codebarre.c codebarre.h
@$(CC) -o $@ -c codebarre.c $(CFLAGS)
clean:
@$(RM) -rf *.o
allclean: clean
@$(RM) -rf codebarre
(每个项目都在一个单独的文件夹中)
当我使用
make
我得到一个错误:
codebarre.c:6:17: 致命错误: PNM.h: 没有那个文件或目录
#include "PNM.h"
^
编译终止。
我使用
时出现同样的错误
make codebarre.o
我想我没有正确使用我的图书馆。但我不知道该怎么做。
编辑:在目录中添加了 PNM.h -> 运行良好
您的第二个项目在当前工作目录中没有 PNM.h
文件(根据您的列表)。然后编译器编译的时候找不到codebarre.c
.
您也需要复制 PNM.h,或者告诉编译器使用 -I
选项在 PNM.h
所在的目录中查找包含文件,例如与
codebarre.o: codebarre.c codebarre.h libpnm.a
@$(CC) -o $@ -Isomedirectory -c codebarre.c $(CFLAGS)
请注意,将 libpnm.a
命名为目标文件的依赖项是 错误的 。该库应该是最终可执行文件的依赖项,例如
codebarre: main.o matricules.o codebarre.o libpnm.a
@$(LD) -o $@ $(LDFLAGS) $^
我有 2 个项目。
第一个有 4 个文件:
1. main.c(其中包括PNM.h)
2. PNM.c(其中包括PNM.h)
3. PNM.h
4. 生成文件
CC=gcc
LD=gcc
CFLAGS=--std=c99 -Wall -W -Wmissing-prototypes
LDFLAGS=
DOXYGEN=doxygen
RM=rm
AR=ar
RANLIB=ranlib
all: pnm
lib: PNM.o
@$(AR) ru libpnm.a PNM.o
@$(RANLIB) libpnm.a
pnm: main.o PNM.o
@$(LD) -o $@ $^ $(LDFLAGS)
main.o: main.c PNM.h
@$(CC) -o $@ -c main.c $(CFLAGS)
PNM.o: PNM.c PNM.h
@$(CC) -o $@ -c PNM.c $(CFLAGS)
clean:
@$(RM) -rf *.o
allclean: clean
@$(RM) -rf pnm
@$(RM) -rf libpnm.a
这个项目运行完美。
在我的第二个项目中,我有 6 个文件和 libpnm.a:
1. libpnm.a
2. main.c(包括matricules.h)
3. matricules.c(包括matricules.h和codebarre.h)
4.matricules.h
5. codebarre.c(包括codebarre.h和PNM.h)
6.codebarre.h
7. 生成文件
CC=gcc
LD=gcc
CFLAGS=--std=c99 -Wall -W -Wmissing-prototypes
LDFLAGS=
DOXYGEN=doxygen
RM=rm
all: codebarre
codebarre: main.o matricules.o codebarre.o libpnm.a
@$(LD) -o $@ $^ $(LDFLAGS)
main.o: main.c matricules.h
@$(CC) -o $@ -c main.c $(CFLAGS)
matricules.o: matricules.c matricules.h codebarre.h
@$(CC) -o $@ -c matricules.c $(CFLAGS)
codebarre.o: codebarre.c codebarre.h
@$(CC) -o $@ -c codebarre.c $(CFLAGS)
clean:
@$(RM) -rf *.o
allclean: clean
@$(RM) -rf codebarre
(每个项目都在一个单独的文件夹中)
当我使用
make
我得到一个错误:
codebarre.c:6:17: 致命错误: PNM.h: 没有那个文件或目录
#include "PNM.h"
^
编译终止。
我使用
时出现同样的错误make codebarre.o
我想我没有正确使用我的图书馆。但我不知道该怎么做。
编辑:在目录中添加了 PNM.h -> 运行良好
您的第二个项目在当前工作目录中没有 PNM.h
文件(根据您的列表)。然后编译器编译的时候找不到codebarre.c
.
您也需要复制 PNM.h,或者告诉编译器使用 -I
选项在 PNM.h
所在的目录中查找包含文件,例如与
codebarre.o: codebarre.c codebarre.h libpnm.a
@$(CC) -o $@ -Isomedirectory -c codebarre.c $(CFLAGS)
请注意,将 libpnm.a
命名为目标文件的依赖项是 错误的 。该库应该是最终可执行文件的依赖项,例如
codebarre: main.o matricules.o codebarre.o libpnm.a
@$(LD) -o $@ $(LDFLAGS) $^