c++ makefile没有创建必要的.o文件
C++ makefile not creating a necessary .o file
下面是我将一些基本的c++文件编译成可执行文件的makefile:
OBJ= node.o link.o trie.o testtrie.o
OPTS= -g -c -Wall -Werror
testtrie: $(OBJ)
g++ -o testtrie $(OBJ)
testtrie.o: prog3.cc trie.h trie.cc link.h link.cc node.h node.cc
g++ $(OPTS) prog3.cc
trie.o: trie.cc trie.h
g++ $(OPTS) trie.cc
link.o: link.cc link.h
g++ $(OPTS) link.cc
node.o: node.cc node.h
g++ $(OPTS) node.cc
clean:
rm -f *.o *~
然而,当我运行make
时,在试图编译prog3。Cc,上面写着:
g++: testtrie。0:没有这样的文件或目录。
我无论如何也弄不明白为什么它不能使测试成功。
提前感谢您的帮助!
您的testtrie.o
规则:
testtrie.o: prog3.cc trie.h trie.cc link.h link.cc node.h node.cc
g++ $(OPTS) prog3.cc
实际上不构建testtrie.o
,它构建prog3.o
。
(它也有几个必要的源文件,它实际上并不使用,除非你做一些不健康的事情,例如,#include
。)
这是因为您的可执行文件(testtrie)依赖于testtrie.o。
默认情况下,编译器(在我们的例子中是g++),在编译源文件(例如src.cc)时,如果没有给定-o,输出的目标文件将匹配源文件名,因此它将是src.o。你的 testtrie。O 目标永远不会生成;而不是 prog3。o :
testtrie.o: prog3.cc trie.h trie.cc link.h link.cc node.h node.cc
g++ $(OPTS) prog3.cc
修改命令为:
g++ $(OPTS) -o $@ prog3.cc
目标testtrie.o
的规则应该构建一个testtrie.o
文件,如下所示:
testtrie.o: prog3.cc trie.h trie.cc link.h link.cc node.h node.cc
g++ $(OPTS) prog3.cc -o testtrie.o
您还可以添加一个自动变量$@
,使其识别基于目标名称的输出文件名:
testtrie.o: prog3.cc trie.h trie.cc link.h link.cc node.h node.cc
g++ $(OPTS) prog3.cc -o $@
两个版本的效果是一样的。另外,要记住以同样的方式纠正剩余的目标。
相关文章:
- 终端不会为C++文件创建.exe文件吗
- 如何从具有两列的.txt文件创建并行数组?
- 从 .lib 文件创建一个.dll文件
- 如何从输入文件 c++ 创建随机名称生成器
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- 如何为多个目录中的多个文件创建生成文件?
- 在编译时从 c++ 文件创建枚举
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 文件创建并不总是成功
- 如何使用 QFile、c++ 从文件创建整数数组
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 从函数中的dat文件创建一个2维数组
- 如何为 cpp 和 h 文件创建别名(并忽略编译器__attributes__)
- 如何从现有的生成文件创建 CMake 文件?
- 为什么我无法使用文本文件创建文件映射?
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 从文本文件创建 2D 字符串矢量
- ofStream: - 尽管文件创建了,但文本文件上没有输出
- 从语言文件创建JSON对象
- 将文本文件创建到节点.js的插件C++