我一直在使用我从互联网上继承的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;
}
生成文件 (箭头是制表符)
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
这显然是我错过了一些重要的信息。我用谷歌搜索了一堆,但大多数结果都是真正有问题的人,而我却无法了解缺少的东西。期待着答案非常尴尬,
谢谢!
答案 0 :(得分:2)
错误消息提供命令行:
g++ project.cpp
注意缺少-c。尽管你的想法很明显,但这显然不在你的makefile中。
答案 1 :(得分:2)
看看你的错误答案:
g++ project.cpp
我能够通过这样做来复制你的错误。
您需要运行 g++ -c
。这是在你发布的Makefile中列出的,但我认为这是你实际使用的那个。如果没有-c
,链接器将尝试链接从cpp文件创建的目标文件。如果是这样,它将找不到外部依赖项,例如zero()
函数。