Хочу запилить форк одного приложения. Приложение написано на плюсах. Вроде не сильно большое и сложное. Но я вообще не плнимаю откуда и как читать этот код, как находить - какие функции за что отвечают, и вообще какова структура этой херни.
До этого я изредка, по работе писал скрипты на Питоне. Там всё логично и понятно. Есть скрипт - запускаешь его - он выполняется. Если надо - подключаешь другие модули и вызываешь функции из них. Всё логично и понятно. Но тут просто какой-то пиздец.
1. Зачем столько файлов в корневой директории? Всякие TODO, INSTALL я понимаю. Просто файл со всякой инфой, которая относится к проекту, а не к программе. Но помимо них там есть всякие autogen.sh, configure.sc, dist.sh и т.д. Нахуя они нужны?
2. Contrib, doc, lib, man, po, src, utils. Назначение директорий doc и man мне понятно. Но всё остальное... Src это вроде как sources, но почему она вынесена отдельно от utils и lib? Зачем?
3. Допустим я открыл директорию src. Откуда начинается выполнение кода? Где тот файл, с которого алгоритм, вызываемый при старте программы, запускается? Как его вообще обнаружить? На языке питонистов - как найти if (__name__=="__main__"):
4. Зачем к каждому файлу с кодом прикрепляется так же и заголовочный файл? Зачем они вообще нужны? Почему нельзя просто прописать всё необходимое в начале файла с кодом?
Ставь вижуал студию (либо IDE от джет брейнс), открывай проект, смотри в мэйн - какие функции там вызываются, ну и переходи по Find Usages/ Find Reference etc. Если не допрёшь так, ставь брейкпойнт на мэйне, и смотри каждый степ
>>243650178 двачую. Была в моём детстве книжка хорошая "С++ для чайников", года этак 99-го издания. Там всё для товарища, бампающего тред по кд написано (базис). Ты сначала проект попробуй развернуть и скомпилировать
Жирнота? >Хочу запилить форк одного приложения. Приложение написано на плюсах. Хорошо. Форкай.
>Вроде не сильно большое и сложное. Это оконный менеджер для никсов. Это большое и сложное приложение. Знаний одного языка тут будет недостаточно, нужно понимать как это цепляется под капотом.
>Но я вообще не плнимаю откуда и как читать этот код, как находить - какие функции за что отвечают, и вообще какова структура этой херни. Структура там довольно логичная. Я хоть и не байтоёб, но вполне разбираю что там происходит (хотя по уровню подпивасный джун уже третий год подряд крутящий круды на C# + js в тырпрайзе). Поэтому если ты даже не можешь разобрать что там происходит под капотом (ты же пытался хотя бы пару вечеров разобрать как оно работает?) - то пытаться дальше не стоит не хочешь срать - не мучай жопу
>До этого я изредка, по работе писал скрипты на Питоне. Там всё логично и понятно. Есть скрипт - запускаешь его - он выполняется. Если надо - подключаешь другие модули и вызываешь функции из них. Всё логично и понятно. Сравнивать сси с пистоном это как сравнивать жопу с пальцем. Петухон - навороченный калькулятор для девочек-аналитиков чтобы рисовать красивые графики. Си - системный ЯП для никсов. Поэтому нихуя не понятно.
>Зачем столько файлов в корневой директории? Всякие TODO, INSTALL я понимаю. Просто файл со всякой инфой, которая относится к проекту, а не к программе. Но помимо них там есть всякие autogen.sh, configure.sc, dist.sh и т.д. Нахуя они нужны? Для установки/инициализации окружения/конфигов.
>Contrib, doc, lib, man, po, src, utils. Назначение директорий doc и man мне понятно. Но всё остальное... Src это вроде как sources, но почему она вынесена отдельно от utils и lib? Зачем? Потому что надо различать где ты срёшь а где жрешь. Если это либа/утилита, то её нахуй не надо изменять в процессе разработки и она спокойно лежит у себя в папке и по-надобности подключается/выполняется. А в src лежит то, что непосредственно реализуется тобой и выполняет твою задачу (и соответственно изменяется от билда к билду).
>Допустим я открыл директорию src. Откуда начинается выполнение кода? Где тот файл, с которого алгоритм, вызываемый при старте программы, запускается? Как его вообще обнаружить? На языке питонистов - как найти if (__name__=="__main__"): Ищешь main https://github.com/bbidulock/icewm/blob/icewm-1-4-BRANCH/src/icerun.cc 54я строка.
>Зачем к каждому файлу с кодом прикрепляется так же и заголовочный файл? Зачем они вообще нужны? Почему нельзя просто прописать всё необходимое в начале файла с кодом? Чтобы различать где жрёшь и где срёшь. См. выше.
>>243649855 Там таретов дохуя и у каждого свой мейн. А таргеты прописаны в CMake. CMake это система сборки, C++ в отличии от пистона нужно конпелировать
>>243649173 (OP) > Но помимо них там есть всякие autogen.sh, configure.sc, dist.sh и т.д. Нахуя они нужны? Всякие шелл скрипты, аналог смд, ток для линукса. >>243649173 (OP) >Откуда начинается выполнение кода? Функция main, ищи ее, int main(), чет такое ищи. >>243649173 (OP) >Почему нельзя просто прописать всё необходимое в начале файла с кодом? Заголовочный файл подставляется вместо include, просто прописать можно, но неудобно, тебе каждый раз придётся дублировать это в каждом файле, а так написал инклюд и норм. Это аналог import в питоне, не точный аналог, но суть похожа.
>>243650625 > Всякие шелл скрипты, аналог смд, ток для линукса. Что такое шелл скрипт я знаю. Когда и кем он должен выполняться - мне не ясно абсодютнл > Заголовочный файл подставляется вместо include, просто прописать можно, но неудобно, тебе каждый раз придётся дублировать это в каждом файле, а так написал инклюд и норм. Это аналог import в питоне, не точный аналог, но суть похожа. Спасибо > Функция main, ищи ее, int main(), чет такое ищи. Тупо через ctrl + f? А как по всем файлам разом искать?
>>243651021 >Когда и кем он должен выполняться - мне не ясно абсодютнл Ну от проекта же зависит, смотри, могу предположить, что autogen что-то там генерирует. >ctrl+f Да, ну или поставь нормальный IDE.
>>243651021 >Когда и кем он должен выполняться - мне не ясно абсодютнл Там в INSTALL или README должно быть написано. В некоторых скриптах сразу коммент есть что они делают >А как по всем файлам разом искать? Ну посмотри в своем редакторе/IDE. Как ты в питоне ищешь? Ctrl + shift + f возможно
>>243649173 (OP) > autogen.sh, configure.sc Чтобы выставить переменные окружения
> Но всё остальное... Src это вроде как sources, но почему она вынесена отдельно от utils и lib? Зачем? Чтобы всё в одной куче не лежало, просто функционально дробится структура проекта.
> 3. Допустим я открыл директорию src. Откуда начинается выполнение кода? Где тот файл, с которого алгоритм, вызываемый при старте программы, запускается? Как его вообще обнаружить? Кури систему сборки CMake и make. Без этого тебе делать нехуй
> 4. Зачем к каждому файлу с кодом прикрепляется так же и заголовочный файл? Зачем они вообще нужны? Почему нельзя просто прописать всё необходимое в начале файла с кодом? Кури плюсы. Без этого тебе опять же делать нехуй.
>>243651021 Куда ты лезешь вообще если у тебя такие вопросы? Это буквально 1-2 пара в непту а колледже а ты даже этого не знаешь. АЛЛО. Это всё равно что зная как лампочку вкрутить в элекрощитовую лезть со словами ДА Я ЗНАЮ КАК ЭЛЕКТРИЧЕСТВО РАБОТАЕТ
Такие же ощущение когда вижу код проекта на го/ноде после php. Как вообще с таким дерьмом можно работать я не представляю. У каждого проекта принципиально разная структура, видно что васяны просто на коленке говнякают как хотят. Могли бы уже за столько лет как-то договориться между собой хоть о каких-то стандартах. А то такое ощущение, что когда новый человек в проект приходит, ему нужно несколько месяцев попросту разбираться что где лежит и как работает.
>>243650402 >Чтобы различать где жрёшь и где срёшь. См. выше. Апдейтну. Потому что МОДУЛЕЙ БЛЯДЬ НЕ ЗАВЕЗЛИ И ИМПЛЕМЕНТНУТЬ ИХ У ВСЕХ КИШКА ТОНКА. ТЬФУ БЛЯДЬ!!!111