tag:blogger.com,1999:blog-3179964835593137794.post2264637177524735750..comments2022-04-09T14:53:02.942+03:00Comments on Распутывая нити: Что-то мне в последнее время не нравится make...Andrey Valyaevhttp://www.blogger.com/profile/05020625213099509709noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-3179964835593137794.post-73919404011707037822012-08-31T20:12:14.530+04:002012-08-31T20:12:14.530+04:00За монстры надо бить по рукам, но не позволять пис...За монстры надо бить по рукам, но не позволять писать код, раскинувшийся от края экрана до края.<br /><br />Да, кто много работает в консоли, используют 8 символов :-) Это знакомо ))<br /><br />Кстати сказать, меня вообще удивляет интерфейсы различных прог в Linux. Много неиспользуемого места, большие кнопки, вокруг которых много пространства... вот под виндами все компактно.Mikehttps://www.blogger.com/profile/07050093735570667334noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-84597245765294341772012-08-30T13:02:46.999+04:002012-08-30T13:02:46.999+04:008 символов на табуляцию рулят.
Не позволяют плоди...8 символов на табуляцию рулят.<br /><br />Не позволяют плодить монстров в виде 5-7 уровневых функций.<br /><br />3 табуляции и баста... а дальше код перестает влезать в лимит на ширину строки - применяй рефакторинг.<br /><br />Тем более, что в консоли табуляция тоже имеет длинну 8 символов.Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-33057911793560616732012-08-30T12:49:33.963+04:002012-08-30T12:49:33.963+04:00Андрей, все нормальные люди используют 4 символа н...Андрей, все нормальные люди используют 4 символа на табуляцию.Mikehttps://www.blogger.com/profile/07050093735570667334noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-30561630115051813872011-12-06T11:33:09.303+04:002011-12-06T11:33:09.303+04:00Сейчас перевожу проект на Scons, с make. Вот это -...Сейчас перевожу проект на Scons, с make. Вот это - хорошая вещь. Есть конечно свои минусы, некоторые мне удалось обойти, но плюсов все равно намного больше.Torstenhttps://www.blogger.com/profile/13408641223765899512noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-26158413829200356102011-11-01T18:06:44.300+04:002011-11-01T18:06:44.300+04:00@Андрей Валяев:
>Хотя локально никто не мешает...@Андрей Валяев:<br /><br /><i>>Хотя локально никто не мешает тебе иметь несколько версий одного и того же файла. Ты даже можешь наплевать на корпоративную систему сборки и собирать чем захочешь. Но это личные проблемы.</i><br /><br />Вот об этом я и говорю. Если мне удобно иметь локальну у себя some_file_v1.cpp, some_file_v2.cpp и some_file_v3.cpp, а корпоративная система сборки будет наровить их компилировать всегда, то это неудобная система. Удобнее, когда есть выбор -- собирать ли все по маске или только то, что вручную указано.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-16143198106678141072011-11-01T17:40:43.411+04:002011-11-01T17:40:43.411+04:002Евгений Охотников: чистота и порядок в репозитори...2<b>Евгений Охотников</b>: <i>чистота и порядок в репозитории. А что делается в моей рабочей копии -- это дело привычки и личных предпочтений.</i><br /><br />Дык в том то и дело, что то, что находится в общем репозитории не должно содержать ничего лишнего. И если тулзы помогают поддерживать чистоту - это хорошо. :) <br /><br />Ты не сможешь случайно закоммитить свои эксперименты и сделать вид, что ничего не произошло. Хотя локально никто не мешает тебе иметь несколько версий одного и того же файла. Ты даже можешь наплевать на корпоративную систему сборки и собирать чем захочешь. Но это личные проблемы.<br /><br />ЗЫ: только что наткнулись на проблему человеческой совместимости. У всех нормальных людей - табуляция 8 символов, а у одного - 4 символа... казалось бы - его личные червяки - пусть разбирается, но командное соглашение допускает строки до 100 символов в жесткой форме.<br /><br />У него короткая строка, по его меркам, но командным соглашениям не соответствует. Конфликт. :)<br /><br />И пробелами его не решить.Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-8919995994718102412011-11-01T17:08:02.949+04:002011-11-01T17:08:02.949+04:00@Андрей Валяев:
>Это вопрос личной дисциплинир...@Андрей Валяев:<br /><br /><i>>Это вопрос личной дисциплинированности. :)</i><br /><br />Все-таки я думаю, что вопрос личной дисциплинированности -- это чистота и порядок в репозитории. А что делается в моей рабочей копии -- это дело привычки и личных предпочтений.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-44804355478417923752011-11-01T13:34:37.024+04:002011-11-01T13:34:37.024+04:002Евгений Охотников: И когда система сборки не дает...2<b>Евгений Охотников</b>: <i>И когда система сборки не дает мне разбрасывать мусор так, как мне вздумается, это напрягает.</i><br /><br />Это вопрос личной дисциплинированности. :) <br /><br />С таким же успехом можно сказать, что компилятор, зараза, не дает мне писать код так, как я хочу... пишет предупреждения, ошибки... напрягает меня. :)<br /><br />Я и сам часто грешу всякой безалаберностью, надо с этим бороться. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-65409485464290226182011-11-01T13:23:06.571+04:002011-11-01T13:23:06.571+04:00@Андрей Валяев:
>А вот это точно надо хранить ...@Андрей Валяев:<br /><br /><i>>А вот это точно надо хранить в репозитории... Тебе не нужны две разных версии файла - тебе нужна ветка для экспериментов. :)</i><br /><br />Ну так в сложном случае я так и делаю -- беру отдельный бранч, делаю себя рабочую копию. А уже в ней крою все так, как мне удобно. Удобно заменить обращения к std::vector на прямые new/delete -- заменяю. Не помогло это -- выбрасываю. Делаю что-то другое.<br /><br />Это моя каша. Я забочусь лишь о том, чтобы в репозиторий попал чистый вариант. Но то, что у меня творится в рабочей копии -- это моя проблема. И когда система сборки не дает мне разбрасывать мусор так, как мне вздумается, это напрягает.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-43809966990836159532011-11-01T13:14:33.000+04:002011-11-01T13:14:33.000+04:00Евгений Охотников:
Файл не должен компилироватьс...<b>Евгений Охотников</b>: <br /><br /><i>Файл не должен компилироваться на данной платформе.</i><br /><br />Да, такое бывает. Но можно придумать альтернативные способы. Например вынести межпроцессное взаимодействие в отдельный модуль и собирать соответственно либо interprocess_linux, либо interprocess_win32 либо еще что-то... <br /><br />Или все различия сконцентрировать в одном файле. То есть файл компилируется по любому, но не в зависимости от платформы имеет разный код.<br /><br /><i>Файл уже подключается куда-нибудь через #include.</i> <br /><br />Категорически не люблю inl. в любых проявлениях. Для этого есть линкер. А если кто-то один и тот же cpp файл включит в два разных исходника?<br /><br />Хотя, может быть, я не все случаи могу себе представить. :)<br /><br /><i>Файл содержит какую-то промежуточную версию кода. Например, у меня есть файл some_stuff.cpp и я пытаюсь найти в нем поблему. Для чего перерабатываю его разными способами. Результат каждой переработки сохранятся в some_stuff_orig.cpp, some_stuff_v1.cpp, some_stuff_v2.cpp и т.д.</i><br /><br />А вот это точно надо хранить в репозитории... Тебе не нужны две разных версии файла - тебе нужна ветка для экспериментов. :)<br /><br />А то иногда бывает так, что файлы вроде бы есть, ты их внимательно изучаешь, ломаешь голову, а потом оказывается что эти файлы уже 5 лет не входят в сборку... Мертвый код должен умереть!<br /><br />Или после таких экспериментов может получиться так, что вот два почти одинаковых файла, давно лежат в проекте... какой из них более правильный? Какой из них нужен? <br /><br />Помоему этой проблемы не должно стоять изначально.<br /><br />Еще такой момент. Эксперименты тоже лучше хранить в базе. Некоторые слишком увлекаются экспериментами, а результата (кода на сервере) нету неделями... Сама по себе необходимость выкладывать код - она сильно стимулирует к достижению результата. :)<br /><br />А сам по себе проект - должен быть чистым.Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-26294040851981121882011-11-01T12:58:27.539+04:002011-11-01T12:58:27.539+04:00@Андрей Валяев:
На счет автоматического включения...@Андрей Валяев:<br /><br />На счет автоматического включения в проект файлов по маске (скажем *.cpp) вспомнился такой нюанс. Временами рядом с нормальными .cpp-файлами лежат файлы с таким же расширением, но которые не нужно включать в проект. Этому могут быть следующие причины:<br />1. Файл не должен компилироваться на данной платформе (скажем, в POCO есть файлы вида Mutex_WIN32.cpp, Mutex_POSIX.cpp).<br />2. Файл уже подключается куда-нибудь через #include. Например, файл содержит автоматически сгенерированный каким-то инструментом фрагмент. Можно было бы для таких файлов использовать другие расширения, вроде .inl, но это не всегда поддерживается.<br />3. Файл содержит какую-то промежуточную версию кода. Например, у меня есть файл some_stuff.cpp и я пытаюсь найти в нем поблему. Для чего перерабатываю его разными способами. Результат каждой переработки сохранятся в some_stuff_orig.cpp, some_stuff_v1.cpp, some_stuff_v2.cpp и т.д.<br /><br />Как раз из-за таких вещей я предпочитаю сам указывать имена cpp-файлов в проекте.<br /><br />Но, если проектная система реализована на скриптовом языке, то нет никаких проблем сделать выборку по маске. Скажем, у меня можно делать и так:<br /><br />cpp_source "some_stuff.cpp"<br /><br />и так:<br /><br />cpp_sources Dir.glob( "*.cpp" )eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-40055764572383483802011-10-28T21:01:36.351+04:002011-10-28T21:01:36.351+04:00"Дык это же собственно и не удобно, когда пом..."Дык это же собственно и не удобно, когда помимо просто переименования файла тебе нужно залезть еще куда-то и поменять его имя."<br /><br />Ну лично у меня эта операция занимает дай бог 0.5% от общего времени разработки(даже если представить что сидишь в консоли с vim - не так уж трудоемко вбить команду s/oldname/newname/g ). Понятно чем меньше и проще проект тем более затратна эта операция. <br /><br />"Но CMake - работает по другому. Я глянул мельком - он не использует обобщенные рули и все прописывает явно. Там мейкфайлы на сотни килобайт. :S Сотни килобайт мусора в папках с моими исходниками?!?"<br /><br />Откровенно говоря мне пофиг сколько там килобайт на выходе. Я выбрал CMake просто из-за лени, ну и потому что он вроде побыстрее SCons (вроде на сайте scons это и написано). Я лично для сборки относительно сложного проекта с кучей зависимостей и около 5-10 тестов написал CMakeLists.txt на 90 строк. И один кастомный FindXXX.cmake модуль строчек на 20 для кастомной зависимости. В папках с моими исходниками нету мусора вообще, я уже писал - весь мусор в build, который естественно не попадает в репозиторий.<br /><br />"Джавистам то хорошо, у них кроме Ant и выбора наверное другого нету."<br /><br />Выбор есть. Например самые популярные: maven, Ivy. Если нет боязни новизны и детских болезней свежих продуктов то можно ещё с полдесятка набрать наверное.Dmitriy T.https://www.blogger.com/profile/12257889673961252182noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-16476974998441022902011-10-28T18:59:35.937+04:002011-10-28T18:59:35.937+04:00Лаврентий Палыч: Дык это же собственно и не удобно...Лаврентий Палыч: Дык это же собственно и не удобно, когда помимо просто переименования файла тебе нужно залезть еще куда-то и поменять его имя. С инклюдами и так хватает забот, поменять имена в тех местах, где они реально нужны.<br /><br />В мейкфайле можно просто использовать wildcards, чтобы собрать все исходники в каталоге. Я, как бы, развил тему и собираю исходники на всю глубину указанной папки.<br /><br />Но CMake - работает по другому. Я глянул мельком - он не использует обобщенные рули и все прописывает явно. Там мейкфайлы на сотни килобайт. :S Сотни килобайт мусора в папках с моими исходниками?!?<br /><br />Джавистам то хорошо, у них кроме Ant и выбора наверное другого нету. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-43964212930506017432011-10-28T18:23:54.628+04:002011-10-28T18:23:54.628+04:00"Это Google test чтоль?"
Он самый.
&qu..."Это Google test чтоль?"<br /><br />Он самый.<br /><br />"Может быть это и не правильно, но я не люблю в мейкфайлах писать, какие файлы нужно включить в сборку, предпочитаю не держать лишних файлов."<br /><br />В случае CMake это вобщем неправильно(если конечно это не маленький проектик под собственные нужды, который никто кроме тебя не увидит). Например, если не захордкодить в CMakeLists.txt список сорцов (а загружать его через например AUX_SOURCE_DIRECTORY), то придётся при добавлении нового сорца форсировать вызов cmake руками, тк make его не вызовет в этом случае. Аналогичные проблемы могут быть в различных связках для continuous integration. Так что проще захордкодить список сорцов и не париться что кто-то добавит/переименует файл, а автоматическая сборка на сервере не пройдёт пока кто-то не форсирует на нём запуск cmake руками (из dashboard или консоли - не важно). Вобщем лишний повод наступить на грабли взамен сэкономленных копеек времени.Dmitriy T.https://www.blogger.com/profile/12257889673961252182noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-10164709349324875102011-10-28T17:20:19.546+04:002011-10-28T17:20:19.546+04:00@Андрей Валяев:
>Нужно действовать максимально...@Андрей Валяев:<br /><br /><i>>Нужно действовать максимально типичным способом.</i><br /><br />Так в том-то и дело, что для C++ типичных способов как собак -- от обычных Makefile с autoconf под *nix-ами до MS Build и MS VS Project files, с промежуточными вариантами вроде SCons, Boost.Build, CMake, MPS и даже Ant.<br /><br /><i>>Переносимость зло! минимальные требования к окружению - компилятор с поддержкой C++11 и буст. :)</i><br /><br />Эх если бы хватало только C++ и, хрен уж с ним, буста... :)eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-86036658347723264732011-10-28T16:39:37.823+04:002011-10-28T16:39:37.823+04:00Спасибо, Евгений! хоть кто-то меня поддерживает :)...Спасибо, Евгений! хоть кто-то меня поддерживает :)<br /><br />Есть несколько сторон нескольких медалей... <br /><br />Если программа внутренняя - для нее можно найти любой, самый нетипичный и никому не известный тул и успешно его юзать. Но если программа открытая - то надо предполагать что люди захотят ее собрать. Зачем навязывать им дополнительные сложности? Нужно действовать максимально типичным способом.<br /><br />Другая медаль про переносимость что-то хотел сказать, забыл... Переносимость зло! минимальные требования к окружению - компилятор с поддержкой C++11 и буст. :) Поэтому древние, бородатые юниксы, в которых нет strcmp, идут лесом.<br /><br />Еще одна медаль - про разрастание проектов... Нам не дано предугадать будущее. Рассчитывать надо на сегодня. :) Возникнут трудности - мы будем их решать.<br /><br />Честно говоря мне совсем не хочется тратить время на изучение еще одного синтаксиса еще одной системы сборки, я и мейк то до конца не постиг.. :) там много всяких возможностей. Усложнять себе жизнь? Зачем? Программы должны быть простые, без сложных описаний.<br /><br />Вот оно - почти все описание:<br />build.py module.o module<br /><br />Ну и плюс еще несколько небольших ньюансов. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-47127755608099524012011-10-28T16:10:57.543+04:002011-10-28T16:10:57.543+04:00Да, знакомое чувство. Правда make я выбросил когда...Да, знакомое чувство. Правда make я выбросил когда-то давным-давно не из-за TDD (коего тогда в наших краях и не было), а из-за необходимости таскать проект между Win, Linux и OS/2. Да еще и разными компиляторами под Win и OS/2.<br /><br />В конце-концов сделал собственную систему сборки. Чем сильно доволен. А если бы ее еще развивал кто-нибудь вместо меня -- так вообще была бы лепота ;)<br /><br />BTW. Имхо, любая система сборки C/C++ проектов должна уметь самостоятельно разруливать зависимости. Хотя бы на примитивном уровне.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-34643415173721688862011-10-28T10:03:40.553+04:002011-10-28T10:03:40.553+04:00Лаврентий Павлович:
туда же гадит и gtest в случ...Лаврентий Павлович: <br /><br /><i>туда же гадит и gtest в случае облома.</i><br /><br />Это Google test чтоль? то-то он мне не нравится, хотя не помню чтобы он гадил, отчеты наверное у меня были выключены. boost test не гадит.<br /><br />Сейчас у меня вообще никто никуда не гадит.<br /><br /><i>А по сути, как только задача слегка усложнится или потребуется интеграция куда-нибудь - уверен на свой велосипедный скрипт придётся положить болт.</i><br /><br />Возможно, но с другой стороны он может собрать очень много. :) Он простой и прямолинейный.<br /><br />А что касается CMake - то он как раз таки очень жестко относится к переименованиям файлов... переименовал - перезапускай cmake.<br /><br />Может быть это и не правильно, но я не люблю в мейкфайлах писать, какие файлы нужно включить в сборку, предпочитаю не держать лишних файлов.Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-11860366243363779982011-10-28T02:39:39.849+04:002011-10-28T02:39:39.849+04:00"И чего я больше всего не люблю - это когда к..."И чего я больше всего не люблю - это когда кто-то гадит в тех каталогах, где лежат мои исходники!"<br /><br />Гм. CMake гадит в той директории откуда вы его запускаете. Лично у меня эта директория build одного уровня с директорией сорцов, туда же гадит и gtest (как-то к нему привык, а не к ctest) в случае облома.<br /><br />А по сути, как только задача слегка усложнится или потребуется интеграция куда-нибудь - уверен на свой велосипедный скрипт придётся положить болт.<br /><br />--------<br /><br />Я не фанат CMake, более того я на c++ программирую редко. Из-за лени и "по совету друзей" выбрал CMake. Хотя периодически душа просит autotools, но лень и направление тенденций в сторону CMake/SCons помогает перебороть эти нездоровые позывы.Dmitriy T.https://www.blogger.com/profile/12257889673961252182noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-53170133366317966742011-10-27T23:50:37.395+04:002011-10-27T23:50:37.395+04:00Не понимаю какое отношение CMake имеет к системе с...Не понимаю какое отношение CMake имеет к системе сборки? Давайте называть вещи своими именами. CMake - это система конфигурирования.<br /><br />И чего я больше всего не люблю - это когда кто-то гадит в тех каталогах, где лежат мои исходники!<br /><br />Вообще идею autoconf я считаю ущербной. и CMake идет туда же, лесом. Мне не нужно проверять наличие в моей системе функций типа strcmp, и меня бесит когда каждый собираемый пакет тупо пытается это делать...Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-76986536680850237852011-10-27T18:39:55.466+04:002011-10-27T18:39:55.466+04:00CMake ftw. И TDD изкоробки умеет, и файлы специфик...CMake ftw. И TDD изкоробки умеет, и файлы спецификаций нужны по одному на проект.Anonymoushttps://www.blogger.com/profile/10906808524752292313noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-5424337339342522412011-10-27T16:50:48.904+04:002011-10-27T16:50:48.904+04:00Может быть, но только я написал всего 80 строк код...Может быть, но только я написал всего 80 строк кода... <br /><br />И мне не надо ставить никаких дополнительных инструментов - это плюс. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-3939118081156914802011-10-27T16:45:06.210+04:002011-10-27T16:45:06.210+04:00Вы переизобретаете заново SCons/CMake.Вы переизобретаете заново SCons/CMake.Qehgthttps://www.blogger.com/profile/13293619483296242978noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-14259443779405130652011-10-27T15:37:30.108+04:002011-10-27T15:37:30.108+04:00Не хочу ставить еще одну систему сборки.. много их...Не хочу ставить еще одну систему сборки.. много их.<br /><br />make есть почти везде. А scons - нет.<br /><br />Хотя с другой стороны я завязался на python, будем рассчитывать, что питон тоже есть везде. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-3740096270119691672011-10-27T15:31:43.508+04:002011-10-27T15:31:43.508+04:00Может я не понял сути проблемы, но scons не подход...Может я не понял сути проблемы, но scons не подходит, как система сборки?Anonymoushttps://www.blogger.com/profile/11632507269944926021noreply@blogger.com