如何在生成文件中包含和编译库

how to include and compile a library in a makefile

本文关键字:包含 编译 文件      更新时间:2023-10-16

我正在尝试构建这个hello world项目,其中包括一个包含.h.cpp文件的库(因此该库也需要编译)。目录结构为

helloworld/lib/StanfordCPPLib/console.h
          /src/hello.h
          /src/hello.cpp

您可以在此处查看项目代码

当我使用以下 makefile 运行make时,出现一个错误,找不到console.h(包含在 hello.cpp 中)

CC=gcc
CFLAGS=-I.
DEPS = hello.h
OBJ = hello.o
#console.h is in lib/StanfordCPPLib and it is included by hello.cpp
INC=-I../lib/StanfordCPPLib
%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS) 
hellomake: $(OBJ)
    g++ -o $@ $^ $(CFLAGS) $(INC)

如何在此生成文件中包括斯坦福库,以便包含和编译它。

(注意,我知道原始源代码包含一个 QT 创建者文件,但是,我正在尝试使用 make 构建它)

主要问题是你构建对象的规则:

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

不使用 $(INC) 中的包含路径

另一个问题是您在错误的文件扩展名上匹配。 %.c应该是%.cpp.

还有一些额外的冗余垃圾,所以我建议你像这样更新你的makefile以获得这个想法:

CC=gcc
DEPS = hello.h
OBJ = hello.o
INC=-I. -I../lib/StanfordCPPLib
%.o: %.cpp $(DEPS)
    $(CC) $(INC) -c $<
hellomake: $(OBJ)
    g++ -o $@ $^

这在我的小模拟设置中构建得很好。请记住,实际上有必要在 hellomake: 下使用 g++ 才能正确链接所有内容。