[英]How to use .cpp and .h files inside subdirectories?
这是我系统中目录的内容:
/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
在您的主directory
中只有一个.cpp
文件,并且*
通配符不在子目录中查找。 您需要显式命名所有源文件,或使用多个通配符(我不建议这样做)。
所以像
g++ main.cpp classes/class1.cpp
您要搜索的内容与编译器(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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.