如何在生成文件中包含和编译库
how to include and compile a library in a makefile
我正在尝试构建这个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++ 才能正确链接所有内容。
相关文章:
- 编译包含字符串的代码时遇到问题
- g++编译包含的头:没有这样的文件或目录
- 包含模板文件的递归会导致编译失败
- 即使不包含其标头,如何成功向前声明的类编译?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 如何确定integer_sequence在编译时是否包含给定的数字?
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- BGL:当包含 random_spanning_tree.hpp 时,对strong_components的调用无法编译
- 为什么我需要包含<compare>标头才能编译 <=>?
- 包含来自 boost 1.73.0 的read_graphviz_new.cpp无法编译
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 编译时条件包含.分段标头与包括整个实现
- 当包含成员函数名为errno和cerrno时,g++7编译错误
- 编译包含LLVM API标头的C++文件时出错
- 包含 cmath 标头时出现 cmake 编译错误
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 为什么包含任意 STL 标头可以解决这些编译错误?
- 在编译期间包含未使用的代码
- GCC - 包含编译标志的宏
- 为什么许多编译语言不包含编译时反射?