如何在makefile中包含和编译库

时间:2016-03-08 00:47:25

标签: c++ makefile

我正在尝试构建这个包含具有.h.cpp文件的库的hello world项目(因此库也需要编译)。目录结构是

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

您可以看到项目代码here

当我使用以下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)

如何在此makefile中包含StanfordLibrary,以便包含和编译它。

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

1 个答案:

答案 0 :(得分:1)

主要问题是您构建objs的规则:

%.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 ++来正确链接所有内容。