以下是我的makefile,用于将一些基本的C++文件编译为可执行文件:
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时,它说:我无法为自己的一生弄清楚为什么它不能使testtrie.o ...
在此先感谢您的帮助!
最佳答案
那是因为您的可执行文件(testtrie)依赖于testtrie.o。
默认情况下,如果未指定-o,则编译器(在本例中为g++)在编译源文件(例如src.cc)时,输出对象文件将与源文件名匹配,因此将为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
关于c++ - C++ Makefile没有创建必要的.o文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32619478/