makefile包括静态库 - C.

时间:2015-07-17 10:35:15

标签: c gcc makefile static-libraries

我有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 - >工作得很好

1 个答案:

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