如何在子目录中使用.cpp和.h文件?

时间:2016-10-31 07:51:18

标签: c++ g++

这是我系统中目录的内容:

/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

2 个答案:

答案 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