g ++无法编译,Cmake没有

时间:2017-09-05 00:08:34

标签: cmake g++ ubuntu-16.04 clion

编辑:找到了答案,这是一个简单的错误。我不觉得这是重复的,因为我知道错误指示的内容(主要功能无法找到对象类的引用),我只是认为我已经正确地包含它并需要另一组眼睛指向在我的makefile行中输出错误。

如果我使用错误的术语,或者我误解了一些简单的术语,我会提前道歉。我对C和C#略有熟悉,这是我尝试使用C ++的尝试。代码中还有其他问题,例如命名不一致但请忽略它们,因为它们不是手头的问题。我也正在重组/重新编写项目,请原谅这个烂摊子。

我有什么

我一直在使用 vim 编写一个小型C ++应用程序,并使用 g ++ 进行编译。它一直工作到一定程度。这个错误对我没有意义,所以我决定尝试 Clion 试图调试它,但令我惊讶的是,它构建并按预期运行。

从终端,我进入项目根目录(src上方一级)并运行make

g++ -c src/item.cpp -o obj/item.o
g++ -c src/hero.cpp -o obj/hero.o
g++ -c src/main.cpp -o obj/main.o
g++ -o oChre.exe obj/hero.o obj/main.o -lm
obj/main.o: In function `main':
main.cpp:(.text+0x467): undefined reference to Hand::Hand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
main.cpp:(.text+0x49e): undefined reference to `Item::getName[abi:cxx11]()'
collect2: error: ld returned 1 exit status
makefile:7: recipe for target 'program' failed
make: *** [program] Error 1

Clion 内部,我只需点击构建运行,项目就会按照我的预期完成并运行。

我怀疑是什么问题

我的makefile如下:

CC=g++
EXT=o
PURGE=rm

#The main bin
program: item.o hero.$(EXT) main.$(EXT)
    $(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm
main.o:
    $(CC) -c src/main.cpp -o obj/main.o

#Creatures
hero.o:
    $(CC) -c src/hero.cpp -o obj/hero.o

#items
item.o:
    $(CC) -c src/item.cpp -o obj/item.o

clean:
    $(PURGE) obj/*.$(EXT) *.exe

我怀疑Clion没有使用我的makefile,因为IDE通常能够确定编译什么以及如何自己编译。这就是我认为Clion成功运行的原因。

什么能解决我的问题

如果有人可以回答以下一个或两个问题,我希望如此:

  1. 为什么g ++没有正确编译?我的makefile有问题或我的编译器配置不正确吗?我希望这个项目将来能够扩展,所以是否值得维护我自己的makefile,或者我应该把它留给IDE。
  2. 为什么Clion会编译我的代码?我可以只获取它生成的makefile并将其放入我的repo中,以便其他人可以编译它吗?
  3. 如果我遗漏了一些重要的内容,请在GitHub上询问或填写所有代码。

1 个答案:

答案 0 :(得分:2)

您的链接命令缺少item.o

#The main bin
program: item.o hero.$(EXT) main.$(EXT)
    $(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm

应该是

#The main bin
program: item.o hero.$(EXT) main.$(EXT)
    $(CC) -o oChre.exe obj/item.o obj/hero.$(EXT) obj/main.$(EXT) -lm