假设我的项目目录有2个子目录A和B,一个目录包含:A.h
和A.cpp
,B目录包含:B.h
和B.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"
?
答案 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.h
和A.cpp
,B
包含B.h
和B.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();
}