为什么我的多文件编译的玩具示例不能编译?

Why will my toy example of multifile compilation not compile?

本文关键字:编译 不能 玩具 我的 文件 为什么      更新时间:2023-10-16

我一直在使用一个makefile,我从互联网上继承了足够长的时间!现在是我学会一劳永逸地编写自己的项目的时候了。所以我读了一些教程并拼凑了一个模型。它不起作用,我现在无计可施了(这通常是我来找你的时候)。

像往常一样,提前感谢大家如此博学。

lib.h

#ifndef LIB_H
#define LIB_H
/** returns the integer zero (0), because the 
 * 0 key on my keyboard is broken. 
 * @pre my keyboard is broken 
 * @post nope, still broken
 * @returns 0 */
int zero();
#endif

lib.cpp

#include "lib.h"
int zero() {
  return 0;
}

project.cpp

#include "lib.h"
int main () {
  int i = zero();
  return 0;
}

makefile(箭头为制表符)

project: lib.o project.o
-->g++ lib.o project.o -o project
project.o: project.cpp lib.h
-->g++ -c project.cpp
lib.o: lib.cpp lib.h
-->g++ -c lib.cpp

当从命令行运行

$ make

我得到以下错误:

g++ project.cpp
/tmp/ccWCSqSx.o: In function 'main':
project.cpp:(.text+0x9): undefined reference to 'zero()'
collect2: ld returned 1 exit status
make: *** [project.o] Error 1

这显然是我漏掉了一些关键信息的一个例子。我在谷歌上搜索过很多次,但大多数结果都是有实际问题的人,我还没能知道遗漏了什么。期待着被这个答案弄得非常尴尬,

谢谢!

错误信息给出命令行:

g++ project.cpp

注意缺少-c。这显然不在你的makefile中,尽管你认为。

看看你的错误答案:

g++ project.cpp

我可以重复你的错误。

需要执行 g++ -c 。这是在您发布的Makefile中列出的,但我认为您实际使用的Makefile中没有列出。如果没有-c,链接器将尝试链接从cpp文件创建的目标文件。当它这样做,它不会找到外部依赖,像你的zero()函数。

相关文章: