这是我系统中目录的内容:
/directory/
classes/
class1.cpp
class1.h
main.cpp
以下是上述文件的内容:
的main.cpp
#include "classes/class1.h"
int main(){
class1 test;
return 0;
}
class1.h
class class1 {
public:
class1();
void test();
};
class1.cpp
#include "class1.h"
class1::class1(){
}
class1::test(){
}
问题是为什么我无法编译main.cpp
?
ghasemi@ghasemi-MS-7693:~/Desktop/directory$ g++ *.cpp
/tmp/ccEvIogL.o: In function `main':
main.cpp:(.text+0x1f): undefined reference to `class1::class1()'
collect2: error: ld returned 1 exit status
答案 0 :(得分:4)
在您的主directory
中,只有一个.cpp
文件,*
通配符不在子目录中查找。您需要明确命名所有源文件,或使用多个通配符(不是我推荐的)。
类似
g++ main.cpp classes/class1.cpp
答案 1 :(得分:1)
您要搜索的内容与编译器(gcc)本身无关,而与构建环境无关。有几种工具可以完成这项工作。
如果您只从一大堆文件开始,您可以每次编译每个文件。但是如果你的项目变得更大,那么一次又一次地编译所有文件是非常耗时的,如果其中一些文件没有改变的话也是如此!
这项工作最常见的是gnu make。
您必须编写描述项目的配置。此文件通常称为" Makefile"。
在这里你定义: 如果文件发生更改,必须编译哪些文件。 哪些文件必须链接在一起。 用于链接和编译所有或单个文件的所有参数。 ......还有更多
所以请查看https://www.gnu.org/software/make/manual/
对于您的项目,它可能看起来像:
all: myprog
main.o: main.cpp classes/class1.h
classes/class1.o: classes/class1.cpp classes/class1.h
myprog: main.o classes/class1.o
g++ main.o classes/class1.o -o myprog