【问题标题】:C++ compilation in linux for newbielinux中的C++编译新手
【发布时间】:2012-03-07 07:59:41
【问题描述】:

假设我的项目目录有2个子目录A和B,A目录包含:A.hA.cpp,B目录包含:B.hB.cpp,我的根目录包含main.cpp

现在内容:

啊哈:

#include"../B/B.h"
a();

A.cpp:

#include"A.h"
a() 
{   
 b();
 }

B.h:

b();

B.cpp:

b()
{
 cout<<"Blah Blah Blah";
}

main.cpp:

#include"A/A.h"
main()
{
  a();
}

并使用以下代码编译代码:

c++ main.cpp A.cpp B.cpp

问题很简单:在第一个文件(A.h)中,我不想将第一行写成 #include"../B/B.h" 如何将其更改为 #include"B/B.h"#include"B.h"

【问题讨论】:

  • 您使用的是哪个编译器?我会假设 G++ ...但永远不会知道。
  • 为什么需要在 A.h 中包含 B.h?我在那里看不到任何依赖关系。
  • @@J.N:我使用的是 ubuntu,所以我假设是 gcc。我只是在命令行中输入了“c++ main.cpp A.cpp B.cpp”我不太熟悉它们的区别。如果有我可以检查的地方或命令,请告诉我......让你知道结果:)
  • @@akhisp:我正在调用 B.h. 中定义的 b()。我猜它被称为依赖项并且需要包含。不是吗?
  • 旁注:您的标题丢失include guards

标签: c++ linux compilation


【解决方案1】:

你可以告诉编译器,头文件在哪个目录/ies。对于 gcc/g++,这是 -I path 选项。 路径可以是绝对路径(例如/home/me/src/projectx/)或相对路径(例如:..)。

您可以将其设置为顶级目录(onw,“B”所在的位置)和写入

#include <B/B.h>

并使用 -I 选项 将其编译到您的顶级目录。

【讨论】:

    【解决方案2】:

    g++ -I[include dir] 正是为此目的。

    【讨论】:

      【解决方案3】:

      鉴于此布局,A 包含 A.hA.cppB 包含 B.hB.cpp,以及根目录中的 main.cpp

      $ ls *.cpp A B
      main.cpp
      
      A:
      A.cpp  A.h
      
      B:
      B.cpp  B.h
      

      你可以使用 `#include "B/B.h" 来编译你的程序

      c++ -I. main.cpp A/A.cpp B/B.cpp 
      

      -I 标志告诉编译器在哪里寻找包含文件。如果您使用 GCC,请参阅the GCC Manual

      源文件内容

      我编辑了您的示例以使其编译并运行:

      A/A.h:

      #include "B/B.h"
      
      void a();
      

      A/A.cpp:

      #include "A.h"
      
      void a() 
      {
          b();
      }
      

      B/B.h:

      void b();
      

      B/B.cpp:

      #include <iostream>
      
      void b()
      {
          std::cout<<"Blah Blah Blah";
      }
      

      main.cpp:

      #include "A/A.h"
      
      int main()
      {
          a();
      }
      

      【讨论】:

      • 如果我只想使用#include "B.h" instead of #include "B/B.h",我应该给-I./B而不是-I。
      • 是的,您可以使用-I./B。您可以在两个目录中搜索包含文件:-I. -I./B
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多