我有2个项目
第一个有4个文件:
1. main.c(包括PNM.h)
2. PNM.c(包括PNM.h)
3. PNM.h
4. makefile
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)
matricules.h
5. codebarre.c(包括codebarre.h和PNM.h)
6. codebarre.h
7. makefile
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
(每个项目都在一个单独的文件夹中)
当我使用
制作
我收到错误:
codebarre.c:6:17:致命错误:PNM.h:没有这样的文件或目录
#include" PNM.h"
^
编译终止。
使用
时出现同样的错误make codebarre.o
我想我没有正确使用我的图书馆。但我不知道该怎么做。
编辑:在目录中添加了PNM.h - >工作得很好
答案 0 :(得分:0)
您的第二个项目在当前工作目录中没有PNM.h
文件(根据您的列表)。然后编译器在编译codebarre.c
时无法找到它。
您也需要复制PNM.h,或者告诉编译器使用PNM.h
选项查找-I
所在目录中的包含文件,例如与
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) $^