Цитата:
Просто закладывай резерв времени на возню. На отладку же закладываешь? Хинт - код продумывается и пишется нормально и без компиляции.
Цитата:
Если кого то заставляют использовать такой подход, то видимо за это платят деньги?
Цитата:
должны существовать и системы сборки более продвинутые, которые прячут эту кухню от тех, кому не хочется разбираться
По-моему, тут подмена понятий. Что платят, что приходится закладывать на это время и что существуют костыли для обхода этой системы, я не спорю. Однако весь этот подход, поставленный в виде стандарта, создает больше проблем, чем приносит пользы. Я не говорю, что с этим невозможно работать, я говорю, что это неудобно и неэффективно, и могло быть гораздо лучше и логичнее. Человек должен заниматься тем, что машина сделать не может (придумывать алгоритм), а то, что она сама могла бы сделать без проблем, машине поручать и нужно.
А следуя логике, что "если бы все сразу учились на мейках, то не было бы воя на форумах о невнятных ошибках линковщика", можно пойти дальше - давайте все будем учиться забивать гвозди тапками, тогда ни у кого с молотком не будет никаких проблем. Если существует убогий инструмент, это значит, что надо придумать что-то лучше. Автосборку в VS и прочих интегрированных средах как раз не от хорошей жизни придумали, а потому, что поняли - это make-возня есть пустая трата времени в 95% случаев. Но иногда получаешь на доработку проект, который авторы компилировали через make, ибо очень религиозные были. И тогда никакие среды не помогут, потому что перетащить с одной системы сборки на другую крайне тяжело, и приходится копаться в этой фигне.
Да и интегрированные среды типа VS тратят на компиляцию куда больше времени, чем могли бы, отчасти из-за того, что их сборка является пачкой костылей над этой порочной системой.
Цитата:
Но предпочитаю более конструктивные обсуждения. Что предлагается взамен make? Если ничего конкретного, то make будет неплохой альтернативой.
Вот я и предлагаю, к примеру, такой вариант:
Компилятору на вход подается главный файл программы. Если хочется, он может состоять только из инклюдов других файлов-модулей, а может содержать и код. Причем модули подключаются напрямую, т.е. без всяких хедеров. Компилятор анализирует все эти инклюды, добавляет их в список того, что нужно скомпилировать.
Каждый файл разбирается, для него строится (и, если надо, сохраняется) бинарный формат с представлением, которое можно быстро превратить в асму. Может это дерево разбора кода, где каждое выражение представлено деревом, где узлы - операции, а ветви - аргументы, может что-то еще. Компилятор генерирует такие деревья для всех файлов, до которых он добрался на этапе компиляции, сохраняя связность (что где использовалось). Далее, начиная с главного файла, идти по всем модулям, которые к нему подключены, и в места вызовов функций из других модулей подставлять вызовы соответствующего разобранного кода. Таким образом компилятор строит граф потока управления для всей программы. Этот граф можно уже рассматривать как цельную программу, и применять соответствующие оптимизации.
При этом вывод компилятора может быть в точно такое же дерево, как и на отдельные файлы, но для всей программы целиком. Тогда этот код можно будет компилировать в составе других проектов, указав в исходнике, что используется такой-то модуль.
Получается, что каждый исходник генерирует кусочек дерева, эти кусочки собираются в большее дерево, эти деревья можно переиспользовать в других проектах. При этом гораздо меньше проблем с разрешением конфликтов (явно указывается модуль), не нужен весь этот make-геморрой (компилятор сам может найти все модули по их подключению в исходник и собрать в правильном порядке), и сохраняется возможность переиспользования готового кода в других проектах. Количество разных "объектных" файлов становится равно не количеству файлов с расширением .C, а количеству принципиально разных частей кода (из разных проектов или на разных языках), то есть в пределах десятка, а не нескольких тысяч.
Цитата:
Дельфи, например, этому требованию соответствует.
Да. В Делфи сборка сделана в разы лучше. И, что интересно, компилируется делфовый проект довольно быстро, хотя я не замечал, чтобы он сохранял где-то промежуточные результаты на отдельные файлы. Хотя, может, плохо смотрел.