Компиляция C ++ в Linux для новичка - PullRequest
1 голос
/ 07 марта 2012

Предположим, что мой каталог проекта имеет 2 подкаталога A и B, каталог A содержит: A.h и A.cpp, каталог B содержит: B.h и B.cpp, а мой корневой каталог содержит main.cpp

Теперь содержимое:

хиджра:

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

a.cpp:

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

B.h:

б ();

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 ]

1 голос
/ 07 марта 2012

g ++ -I [include dir] именно для этой цели.

1 голос
/ 07 марта 2012

Вы можете указать компилятору, в каком каталоге находятся файлы заголовков. Для gcc / g ++ это опция -I path . путь может быть абсолютным (например, /home/me/src/projectx/) или относительным (например: ..).

Вы можете установить его в каталог верхнего уровня (onw, где находится буква "B") и запись

#include <B/B.h>

и скомпилируйте его с параметром -I , указывающим на каталог верхнего уровня.

0 голосов
/ 07 марта 2012

Учитывая этот макет, с 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 / Bh "и скомпилировать вашу программу с помощью

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

Флаг -I указывает компилятору, где искать включаемые файлы.Если вы используете GCC, см. Руководство по GCC .

Содержимое исходного файла

Я отредактировал ваш пример, чтобы он компилировался и выполнялся:

A / Ah:

#include "B/B.h"

void a();

A / A.cpp:

#include "A.h"

void a() 
{
    b();
}

B /Чч:

void b();

B / B.cpp:

#include <iostream>

void b()
{
    std::cout<<"Blah Blah Blah";
}

main.cpp:

#include "A/A.h"

int main()
{
    a();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...