我正在尝试构建这个包含具有.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构建它)
答案 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 ++来正确链接所有内容。