gpt4 book ai didi

c - makefile 包含静态库 - C

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:57 24 4
gpt4 key购买 nike

我有 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. 矩阵.h
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

(每个项目都在一个单独的文件夹中)
当我使用

make

我得到一个错误:
codebarre.c:6:17: fatal error : PNM.h: 没有那个文件或目录
#include "PNM.h"
^
编译终止。

我使用时出现同样的错误

make codebarre.o

我想我没有正确使用我的图书馆。但我不知道该怎么做。

编辑:在目录中添加了 PNM.h -> 运行良好

最佳答案

您的第二个项目在当前工作目录中没有 PNM.h 文件(根据您的列表)。那么编译器在编译codebarre.c的时候就找不到了。

要么您也需要复制 PNM.h,要么告诉编译器使用 -IPNM.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) $^

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com