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

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

02.08.2015, 19:30. Показов 1484. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru