C++新手的 Linux 编译

C++ compilation in linux for newbie

本文关键字:编译 Linux 新手 C++      更新时间:2023-10-16

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

现在内容:

啊:

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

答.cpp:

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

B.h:

b((;

乙.cpp:

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

主.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"

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

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

#include <B/B.h>

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

g++ -I[include dir] 正是为了这个目的。

给定此布局,其中A包含A.hA.cppB包含B.hB.cppmain.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,请参阅 GCC 手册。

源文件内容

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

A

/A.h:

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

答.cpp:

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

/B.h:

void b();

提单.cpp:

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

主.cpp:

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