LINUX.ORG.RU

Структура исходников сложного проекта C++


0

3

НЕмного читал по этой теме. Популярна схема build - сборка src - сpp сxx файлы headers - заголовки

Как организовать include в cpp

#include '../headers/headfile.h'

Очень неприятно и неудобно. Как можно сделать простой инклуд #include 'headfile.h' Средствами cmake.


Добавить директорию в переменную INCLUDE (INCLUDES в зависимости от системы сборки)?

UVV ★★★★★
()

#include <headfile.h>

добавить для сборки путь ../headers

vaino
()

и да - структура не обязательно может быть такой, обычно так делают для библиотек, для сложных проектов иерархия может быть сложней и тогда логичней хедера и .cpp хранить рядом

vaino
()

средствами cmake это будте примерно так:

include_directories(${PROJECT_SOURCE_DIR}/headers)

Vinick ★★
()
# project/dist/Makefile                                                                                      
#        /src/folder1/header.h                                                                               
#            /folder2/lib1.cpp,lib1.h                                                                        
#            /folder3/any.cpp                                                                                
                                                                                                             
SOURCEROOT      := ../src                                                                                    
SOURCEDIRS      := $(shell ls $(SOURCEROOT))                                                                 
SRCDIRLIST      := $(addprefix $(SOURCEROOT)/, $(SOURCEDIRS))                                                
SEARCH          := $(addsuffix /*.cpp, $(SRCDIRLIST))                                                        
VPATH           := $(SRCDIRLIST)                                                                             
                                                                                                             
all:    $(notdir $(patsubst %.cpp, %.o, $(wildcard $(SEARCH))))                                              
        $(CXX) $(LDFLAGS) $^ $(LIBS) -o $@                                                                   
                                                                                                             
%.o: %.cpp                                                                                                   
        $(CXX) -c -MD $(addprefix -I, $(SRCDIRLIST)) $< $(CFLAGS)                                            
                                                                                                             
include $(wildcard *.d)                                                                                      
                                                                                                             
.PHONY: clean                                                                                                
                                                                                                             
clean:                                                                                                       
        rm -f *.o *.d                                                                                        

Освойте уже make! Нужна сложная структура каталогов? Просто генерируй SOURCEDIRS

anonymous
()

Очень неприятно и неудобно

А в чем именно неприятство и неудобство О_О ??? Наоборот, сборка идет обычно перед установкой, и такой подход хоть как то гарантирует что потянешь именно хидеры новой версии, а не старой установленной. А все эти танцы с бубнами...

#include 'myheader.hpp'

и где именно лежит этот хидер? И Вы уверены, что он в системе один и что прицепили именно его? За счет таких удобств бывают очень непонятые и трудноуловимые ошибки, особенно при совместной разработке.

AIv ★★★★★
()
Ответ на: комментарий от Bad_ptr

а что сейчас модно и правильно использовать тогда?

Модно - С#. Правильно - то, что удобно для данной задачи. Make вполне удобен.

AIv ★★★★★
()

Мы делаем так:

include_directories("${PROJECT_SOURCE_DIR}/3rdparty/libsndfile/win32-vs2010")

После чего пишем:

#include <libsndfile.h> // или как там его точнее...
kiverattes ★☆
()

В сложном проекте в папке src создаю еще подпапки (core, ui, ...).

.h и .cpp вместе лежат.

#include "../core/settingsmanager.h"

выглядит вполне нормально, имхо.

unfo ★★★★★
()

Я после явы привык группировать по пакетам. Пакетов в с++ нет, но структура каталогов соответствующая.

project [common[...], core [graphics[...], sound[...]], ui [view [LinearLayout.h]]], тогда для включения в любом месте LinearLayout нужно #include «ui/view/LinearLayout.h»

Кажется вполне логичным, не путаюсь.

note173 ★★★★★
()
Ответ на: комментарий от note173

Хотя я тут подумал, может для этого принято вложенные модули использовать? Если что, просветите.

note173 ★★★★★
()
Ответ на: комментарий от note173

У меня в продукте все файлы заголовков (хЕдеры) с экспортируемыми функциями или классами хранятся в папке include в корне проекта.

JackyTreehorn
()
Ответ на: комментарий от Reset

а makefile не только для гнутого make

Про это я прочитал, прежде чем постить.

Он генерирует не только makefile

А это что например?

anonymous
()
Ответ на: комментарий от JackyTreehorn

Почему-то кажется, что при большом объеме проекта (особенно если он полностью на классах) в одном каталоге легко запутаться.

note173 ★★★★★
()
Ответ на: комментарий от note173

Если он не только на классах, то еще хуже, но существуют же средства навигации по коду.

JackyTreehorn
()

И будет капец структуре твоего кода.Левый программист посмотрит-и ужаснется.

Почему-у тебя 10 каталогов с хеадерами для разных частей проекта ну и имена фалов там чтото типа- хеадер-глобал.х
И так во всех каталогах-и только в профилях симейка указано какой каталог инклюдит какая часть проекта......

Когда сам с таким столкнешся-кода на 300мб и куча однотипных(имена фалов одни) хеадеров в разных каталогах,и фиг пойми какой что инклюдит.Да держать в уме какой файл что инклюдит-после этого и возникнет ...любовь к разработчикам проекта.
(ах да-когдато(и щас тоже бывает) и я так делал и через пол года возвращаюсь на обновление проекта-и просто люблю сам себя)

Указывать относительный путь,без левых профилей сборки.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.