Linux中的C ++编译新手

时间:2012-03-07 07:59:42

标签: c++ linux compilation

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

现在内容:

A.H:

#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"

3 个答案:

答案 0 :(得分:1)

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

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

#include <B/B.h>

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

根据此布局,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();
}