我有两个项目。
第一个文件包含4个文件:
一主c(包括PNM.h)
2PNM.c(包括PNM.h)
三。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:
一利伯南
2main.c(包括matricules.h)
三。matricules.c(包括matricules.h和codebarre.h)
4。基质
5个codebarre.c(包括codebarre.h和PNM.h)
6科德巴雷.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

(每个项目都在一个单独的文件夹中)
当我使用
制造
我得到一个错误:
codeberre.c:6:17:致命错误:PNM.h:没有这样的文件或目录
#包括“PNM.h”
^
编译终止。
使用时出现相同错误
制作codeberre.o
我想我没有正确使用我的图书馆但我不知道怎么做。
编辑:在目录中添加PNM.h->工作良好

最佳答案

您的第二个项目在当前工作目录中没有PNM.h文件(根据您的列表)然后编译器在编译codebarre.c时找不到它。
您也需要复制PNM.h,或者告诉编译器使用PNM.h选项在-I所在的目录中查找include文件,例如

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) $^

关于c - makefile包含静态库-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31473873/

10-12 17:53