以下是我的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/

10-14 07:07