LINUX.ORG.RU

Разбиение проекта на C++ на подкаталоги


0

0
Добрый день!

Возникла задача разбить проект на C++ на подкаталоги в соответствии с его внутренней структурой. Пример:

main.cpp
globals.h
ui/
window.h
window.cpp

Хочется странного: чтобы при подключении заголовочного файла нужно было указывать "подсистему", к которой он относится.

Например, и в файле main.cpp и в файле window.cpp файл globals.h должен включаться так:
#include "globals.h"

Аналогично и с файлом window.h - в файлах main.cpp и window.cpp нужно добавить:
#include "ui/window.h"

Внимание, вопрос: что такое нужно сказать GCC, чтобы он воспринял подобный код?
★
В упор не понял что вы хотите.

Особенно:

>Хочется странного: чтобы при подключении заголовочного файла нужно было указывать "подсистему", к которой он относится.

wfrr ★★☆
()
это идиотизм и дебилизм, который ухудшит понимание структуры проекта и затруднит чтение сорс-кода другим разработчикам. другими словами, это называется быдлокодинг.

адекватное решение - переместить window.h в ui.

anonymous
()
Ответ на: комментарий от wfrr
Элементарно - хочу, чтобы путь к файлу, указанному в #include "" отсчитывался от корневого файла проекта, вне зависимости от того, где находится файл, содержащий эту директиву.
syomin ★
() автор топика
Ответ на: комментарий от anonymous
window.h и так в ui - читайте, пожалуйста, внимательнее...
syomin ★
() автор топика
Так, наверное, будет понятнее.

[syomin@localhost test]$ cat main.cpp
#include "globals.h"
#include "ui/window.h"

int main()
{
return 0;
}
[syomin@localhost test]$ cat globals.h
#ifndef GLOBALS_H
#define GLOBALS_H

#endif
[syomin@localhost test]$ cat ui/window.h
#ifndef WINDOW_H
#define WINDOW_H

#endif
[syomin@localhost test]$ cat ui/window.cpp
#include "globals.h"
#include "ui/window.h"

void foo() {}
[syomin@localhost test]$ c++ -c main.cpp -o main.o
[syomin@localhost test]$ c++ -c ui/window.cpp -o ui/window.o
ui/window.cpp:1:21: error: globals.h: No such file or directory
ui/window.cpp:2:23: error: ui/window.h: No such file or directory

Самое интересное, что судя по исходникам, разработчики Inkscape эту проблему победили, но уж очень не хочется разбираться, как Inkscape собирается...
syomin ★
() автор топика
main.cpp
globals.h
ui/window.h
ui/window.cpp


--- BEGIN --- main.cpp

#include "ui/window.h"
////
///
//

--- END --- main.cpp


gcc -I./ui main.cpp


irc_007_1
()
Ответ на: комментарий от ttnl

Dir/object.c
Dir/object.h
Dir/catalog/support.c
Dir/catalog/support.h


support.c компилируешь с ключом -I..
,тогда в нем можно использовать конструкции вида #include<object.h>
ttnl ★★★★★
()
Ответ на: комментарий от syomin
Накуя использовать #include "", когда можно сделать, как я написал.

Если очень хочется с кавычками "", то делай так:#include"../object.h"

ttnl ★★★★★
()
Ответ на: комментарий от ttnl
Элементарно - потому что #include "" удобно использовать для подключения файлов ИЗ ПРОЕКТА, а #include <> - СТОРОННИХ файлов. А ваш вариант мне известен, и он мне не нравится :)
syomin ★
() автор топика
В общем, отца русской демократии спас ключик -qoute. Вопрос закрыт.
syomin ★
() автор топика
Ответ на: комментарий от syomin
> Ключик -I влияет только на файлы, включаемые с помощью #include <>

4.2, читайте хоть изредка документацию перед тем как постить.

-iquote тут imho небольшой overhead, плюс она есть только в gcc 4. -I хватит выше крыши.

anonymous
()
Ответ на: комментарий от anonymous
В более старых GCC вместо -iquote есть ключик -I-.
syomin ★
() автор топика
>что такое нужно сказать GCC, чтобы он воспринял подобный код?

Если для вас трудно почитать ман гцц - то лучше доверить генерацию мейкфайлов утилитам типа premake, cmake, auto* ...
Они сгенерируют и пути и зависимости между проектами и тд.
stpg ★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.