Название: Организация больших проектов Отправлено: sergek от Апрель 20, 2017, 18:07 Коллеги,
мне казалось, здесь появлялась тема о принципах организации больших проектов (несколько подпроектов, совместное использование исходников и др.). Может, напомните, где это обсуждалось? Название: Re: Организация больших проектов Отправлено: titan83 от Апрель 20, 2017, 18:23 Тоже интересно.
Может корифеи вкратце изложат... ::) Название: Re: Организация больших проектов Отправлено: ViTech от Апрель 20, 2017, 18:32 Такая вот тема была: Управление структурой проекта (.pro) (http://www.prog.org.ru/topic_30171_0.html).
А что конкретнее интересует и с чем проблемы возникают? Название: Re: Организация больших проектов Отправлено: qate от Апрель 20, 2017, 19:07 да, тоже интересно, как организовать проект, чтобы если гдето чтото починил, то в другом месте не поломалось ?
Название: Re: Организация больших проектов Отправлено: sergek от Апрель 20, 2017, 19:11 Спасибо.
А что конкретнее интересует и с чем проблемы возникают? Примерно это и интересует - в какой мере иерархия проекта стремится к иерархии разрабатываемой системы.Название: Re: Организация больших проектов Отправлено: ViTech от Апрель 20, 2017, 20:14 Я в ходе своей деятельности пришёл к следующему положению вещей :).
На глобальном уровне: Отделять "исходные файлы проекта" от всего остального. Быстрый пример: Код
В Project* располагаются "исходные файлы проекта" (подробнее ниже). В Build происходит сборка проекта, там весь сборочный мусор и его результат - исполняемые файлы. Каталог с исполняемыми файлами (пусть будет bin) можно вынести и на уровень выше (наравне с Build). Это может быть актуально для qmake. Но я пользуюсь в основном Qbs, и он сам складывает все исполняемые файлы крупного проекта в одно место. Основной смысл отдельного каталога Build - его можно целиком грохнуть, не боясь зацепить что-то полезное. В Workdir лежат файлы необходимые для работы и тестирования приложений. Этот каталог указывается в IDE в параметрах запуска приложения. Возможно ещё какие-нибудь каталоги понадобятся на таком высоком уровне: Tool, Script и т.п. На уровне "исходных файлов проекта": Этот каталог должен быть подготовлен к существованию под управлением системы контроля версий. Я пользуюсь git, с остальными будет аналогично. Здесь должны располагаться только необходимые файлы для совместной разработки: сами исходные файлы, необходимые для сборки ресурсы, проектные файлы для систем сборки, тесты и тому подобное. Рядом с проектными файлами для систем сборки наверняка будут создаваться проектные файлы IDE, как полезные, так и временные. QtCreator создаёт *.user. Visual Studio гадит намного больше. Все эти файлы от IDE нужно добавлять в список игнорирования git, для совместной разработки они не нужны. Структура файлов отдельного модуля (библиотеки/приложения) может быть разной. К примеру такой: Код
На уровне "комплекса": Комплекс состоит из множества модулей (библиотек/приложений). В терминах git модуль - это submodule, а комплекс - коневой репозиторий, к которому эти submodule и подключаются. Т.е. исходные файлы каждой библиотеки/приложения находятся в своём отдельном репозитории, а вместе собираются в качестве подмодулей в репозитории комплекса. Пример такого комплекса приводился здесь (http://www.prog.org.ru/index.php?topic=30171.msg222516#msg222516). В каталоге project комплекса так же находятся проектные файлы систем сборки, которые управляют уже сборкой всего комплекса. В общих чертах как-то так :). Если нужны подробности по какому-то пункту - спрашивайте. Название: Re: Организация больших проектов Отправлено: sergek от Апрель 20, 2017, 21:49 Основной смысл отдельного каталога Build - его можно целиком грохнуть, не боясь зацепить что-то полезное. Где располагаются ini-файлы приложения, js-скрипты и т.д.? Обычно их расположение задается относительно каталога запуска.Т.е. исходные файлы каждой библиотеки/приложения находятся в своём отдельном репозитории, а вместе собираются в качестве подмодулей в репозитории комплекса. Если у приложений есть общие модули, как организуется их совместное использование? К сожалению, не понял.Не задумывался раньше - а что происходит с компиляцией совместных используемых файлов при сборке нескольких приложений? Название: Re: Организация больших проектов Отправлено: ViTech от Апрель 20, 2017, 23:26 Где располагаются ini-файлы приложения, js-скрипты и т.д.? Обычно их расположение задается относительно каталога запука. Нормальное приложение должно работать относительно рабочего каталога (https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3), который указывается при его запуске. В предлагаемой схеме это Workdir, там отдельная папка для каждого приложения. Это для примера, основной смысл в том, чтобы рабочий каталог располагался отдельно от Build, bin и исходников. Если у приложений есть общие модули, как организуется их совместное использование? К сожалению, не понял. Не задумывался раньше - а что происходит с компиляцией совместных используемых файлов при сборке нескольких приложений? Совместно используемый модуль - это, как правило, библиотека, которая может быть собрана как динамической, так и статической. Т.е., по-хорошему, совместно используемые файлы должны формироваться в библиотеку и компилироваться только в ней (*.cpp). Такую собранную библиотеку затем могут линковать модули, в которых она требуется. Заголовочные файлы *.h библиотеки должны быть доступны другим модулям, через подключение по системным путям вида #include <LibraryName/SomeHeader.h>. Система сборки сама должна отслеживать зависимости между модулями и собирать их в таком порядке, чтобы не возникало неразрешённых зависимостей. Название: Re: Организация больших проектов Отправлено: sergek от Апрель 21, 2017, 00:13 В предлагаемой схеме это Workdir, там отдельная папка для каждого приложения. Это для примера, основной смысл в том, чтобы рабочий каталог располагался отдельно от Build, bin и исходников. Каталог запуска, рабочий каталог - не суть. Где же располагаются упомянутые мной файлы, отдельно от проекта, в каталоге, который грохнуть?Совместно используемый модуль - это, как правило, библиотека, которая может быть собрана как динамической, так и статической. Именно, как правило. Но не всегда. Но и это не главное, а то, что на этапе разработки эти модули активно дорабатываются и смысла их линковать нет.Но ваш подход понятен, спасибо за советы. Название: Re: Организация больших проектов Отправлено: deMax от Апрель 21, 2017, 11:11 А если есть тесты и модульность? Да еще бы CI воткнуть :) ну чтоб на сервере проверялось, в git результаты тестов дописывало и в редмайне отображало.
Имхо для build-а и так теневая папка создается отдельно(где её создавать и как можно прописать, но обычно и по умолчанию нормально). Мое имхо как то так(для одного проекта): bin test - здесь папки с тестами src modules - здесь папки с модулями Название: Re: Организация больших проектов Отправлено: sergek от Апрель 21, 2017, 11:58 Да еще бы CI воткнуть :) ну чтоб на сервере проверялось, в git результаты тестов дописывало и в редмайне отображало. Ничего не понял ;)Название: Re: Организация больших проектов Отправлено: deMax от Апрель 21, 2017, 12:09 Ничего не понял ;) CI - continuous integration.Название: Re: Организация больших проектов Отправлено: ViTech от Апрель 21, 2017, 12:53 Каталог запуска, рабочий каталог - не суть. Где же располагаются упомянутые мной файлы, отдельно от проекта, в каталоге, который грохнуть? Упомянутые файлы располагаются в каталоге Workdir, отдельно от каталога с проектом под управлением git. Если есть общие *.ini, *.js и прочее, то можно их тоже добавить под управление git, и копировать в тот Workdir. Это уже больше относится к стадии развёртывания приложения и настройки его окружения. Лично я предпочитаю, чтобы в git было минимум мусора, который может появляться на этапе сборки, развёртывания и работы продукта. Именно, как правило. Но не всегда. Но и это не главное, а то, что на этапе разработки эти модули активно дорабатываются и смысла их линковать нет. Не вижу тут особых проблем или противоречий. Изменились файлы библиотеки - она пересобралась и следом все зависящие от неё модули, если эти изменения их затронули. Это проблемы системы сборки, а не организации структуры проекта. А если есть тесты и модульность? Да еще бы CI воткнуть :) ну чтоб на сервере проверялось, в git результаты тестов дописывало и в редмайне отображало. Кто дошёл до CI, тот, скорей всего, свою структуру проектов уже придумал :). Я больше про рабочее место разработчика рассказываю. Название: Re: Организация больших проектов Отправлено: sergek от Апрель 21, 2017, 13:22 Это проблемы системы сборки, а не организации структуры проекта. Пожалуй, вы правы. |