С Новым годом! Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561

Структура приложения

02.08.2015, 19:30. Показов 1487. Ответов 2

Студворк — интернет-сервис помощи студентам
Меня уже давно интересует как правильно организовать структуру приложения(набор каталогов, файлов etc). Куда класть сторонние библиотеки и в какой форме? Если исходники, то это надо файлы лицензий, документацию, писать какие-то скрипты для сборки. Или просто оставлять список зависимостей, которые надо скачать/собрать/установить? Но ведь это выглядит не очень удобно. Может есть какие-то методы работы с 3rd party проектами?
P.S. Использую систему сборки cmake.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2015, 19:30
Ответы с готовыми решениями:

Структура приложения
Обращаюсь к опытным разработчикам как новичок. Хочу написать маленькое несложное приложение, но возникла проблема с проектированием...

Структура приложения
У меня есть класс user и post. Есть контроллер. Насчет классов понятно - на каждый объект свой класс. А вот насчет контроллеров -...

Структура приложения
Коллеги, помогите, плз, советом. Создаю приложение: Есть консольный класс Client: В общих чертах программа делает следующее (Для...

2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.08.2015, 10:41
Лучший ответ Сообщение было отмечено dailydose как решение

Решение

Цитата Сообщение от ВАСИЛЕВС Посмотреть сообщение
P.S. Использую систему сборки cmake.
у меня кроссплатформенная система,
которая ориентированна на поддержку крупных и малых проектов,
в условиях независимости от целевых IDE.

сегодня базируется на "умных" сценариях сборки под управлением cmake.


есть иерархия каталогов:

Code
1
2
3
4
5
6
7
8
workspace         корневой каталог рабочего пространства
 |--- deploy        здесь содержатся исходный код внешних библиотек
 |--- doc            документация
 |--- external      сюда инсталируются собранные внешние библиотеки
 |--- service       скрипты сборки
 |--- utilities       утилиты компании
 |--- projects      исходный код продуктов компании 
  `-- product       результат сборки: готовая продукция компании
в деплое содержатся исходный код чужих библиотек,
которые нужно собирать из исходников.
такие, как например boost, gmock, tools, etc

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

виндовсы:
make.bat

линуксы:
make.sh

цель простая:
сотрудник компании не должен мудохаться со сборкой.
для разворота какого нибудь boost необходимо зайти в его каталог,
и запустить батник.

собранный буст попадает в каталог external.

выглядит это примерно так:

Code
1
2
3
4
5
6
7
8
9
10
11
12
external
 |--- mingw
 |       |--- boost
 |        `-- gmock
 |
 |--- msvc2013
 |       |--- boost
 |        `-- gmock
 |
  `-- gcc
        |--- boost
         `-- gmock
вот здесь имена каталогов: mingw/gcc/msvc2013 выступают в качестве тэгов конфигурации
в зависимости от конфигурации сборки, умный сценарий самостоятельно опредилит,
куда именно можно заходить, а куда нельзя.
и сможет найти библиотеку.

рассмотрим каталог чуть поближе:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
external
 `--- mingw
        |--- boost
        |       |--- include
        |       |--- lib32
        |        `-- lib64
        |
         `-- gmock
                |--- include
                |--- gmock-32-d.a
                |--- gmock-32.a
                |--- gmock-64-d.a
                `--- gmock-64.a
сами по себе библиотеки могут располагаться по каким угодно путям,
и иметь самое разнообразное строение.

однако, в именах каталогов или файлов так же могут содержаться тэги конфигурации.

в данном случае по циферкам 32/64 умный сценарий сможет различать адрессную модель
(32 или 64 битная сборка)
а по таким тэгам, как debug, или -d может отличить дебажную либу от релизной.

в специальном конфигурационном файле, который содержится в каталоге service,
пользователи могут самостоятельно назначать произвольные тэги.

обыкновенно, в каталоге projects содержится CMakeLists.txt
это - умный сценарий. он один единственный на все рабочее пространство.
не нужно знать что внутри него, и вообще для работы знания cmake не понадобится.

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

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

цель, и список исходников, из которых она состоит будет
обнаружено автоматически.


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

батник содержит три возможные настроки:
генерация файлов проекта целевой ИДЕ, и остановка
генерация файлов проекта целевой ИДЕ, и запуск этой ИДЕ
генерация файлов проекта целевой ИДЕ, и запуск сборки

очень удобно.

при запуске, умный сценарий автоматически находит все цели проекта.
определяет состав целей (списких исходных файлов указывать в ручную не нужно)

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

находит цели-демонстрации, если они есть.
находит цели-юнит-тесты, если они есть.
и подключает к ним все необходимое.

если есть зависимости от динамических либ - копирует их к бинарнику
если есть ресурсы (картинки, конфиги) - копирует их к бинарнику.

короче - полное обслуживание.

и на выхлопе формируется список всех обнаруженных целей.

в этом же файлике пользователь может указать, какие цели он хочет собирать, а какие ему не нужны.

при этом, если указанная пользователем цель зависит от другой цели (которую он не указал),
она все равно принудительно будет включена в сборку, если отсутствует уже построенная либа.

это нужно, что бы все зависимости были удовлетворенны.

резюмируя:

придерживаясь нескольких весьма простых правил,
на cmake не сложно автоматизировать всю рутину.

и забыть о том, как неудобно, долго и нудно
приходится каждый раз вручную настраивать каждую цель проекта.
2
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
27.08.2015, 11:10  [ТС]
Спасибо за схему каталогов, я как-то даже не подумал о такой форме. Получается, что вы смешиваете скрипты(sh, bat) + систему cmake? Можно подробнее о умных сценариях?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2015, 11:10
Помогаю со студенческими работами здесь

Структура приложения ООП
Добрый день! Погружаюсь в изучение ООП в PHP! Не могу нигде нарыть информацию о структуре приложений. Допустим есть задача - создать...

Структура страничного приложения
С WPF познакомился совсем недавно. Хочу создать программу, которая будет работать в страничном режиме, но не совсем так, как это...

Правильная структура приложения
С новым годом всех! Нужно сделать личный кабинет и что бы все экшены которые в нем доступны начинались так site.ru/my/тут название...

Структура приложения в Android Studio
Здравствуйте. Вот сделал обработчик события на одну из многих кнопок в приложении в Google Maps Activity. package...

Правильная структура Thymeleaf приложения
Приветствую. Делаю небольшой pet-проект с использованием связки Spring + Thymeleaf. На данный момент все устроено так как во многих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru