Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обсуждение PCH  (Прочитано 20888 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 30-10-2006 14:02 » 

А что, никто не практикует отключение этого, на мой взгляд, безобразия в проектах?

Меню VS .NET: выбрать [Project]/[Properties...]
Там в диалоге в дереве выбрать [C/C++]/[Precompiled Headers].
В таблице свойству [Create/Use Precompiled Header] поставить значение "Not Using Precompiled Headers".

Или, если проще, убрать ключ "/Y" из командной строки компилятора.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 30-10-2006 14:06 » 

dimka, нет у нас наоборот активно используется.
Почему, это безобразие?
PCH и в GCC есть, там есть правда проблемы кое-какие(уже обсуждались), но вполне приятная штука
у нас время компиляции некоторых объектов сокращается на 10-15 минут
+ инкрементальная сборка при отладке проходит быстрее
Записан

Странно всё это....
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 30-10-2006 16:38 » 

LogRus, прав на 100% я тоже Precompiled Headers всегда исползовал и использую.

dimka, на чём основано утверждение о безобразии? А потом stafx.h не есть stdafx.cpp, который по умолчанию стоит для Precompiled Headers. Чёт ты всё в кучу собрал.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 30-10-2006 19:51 » 

Я в кучу ничего не собирал Улыбаюсь и про cpp вообще не говорил.

Некоторые выгоды в скорости, ущерб в потере чёткой межмодульной связности и избирательности в подключении тех или иных библиотечных возможностей. (Хотя в C++ это можно с помощью пространств имён разрешить.)

Не думаю, что для учебных программ так уж жизненно необходимы PCH, учитывая производительность современных машин.

P.S. Кстати, аргументы "Есть там-то." и "Мы пользуемся." какие-то сомнительные Улыбаюсь. Вот "Экономит 15 минут на сборке." - это уже более весомо. Только непонятно, каков объём и структура проекта? Что включено в PCH, а что подключается отдельно? Как часто происходит полная пересборка проекта, на которой экономятся упомянутые 15 минут?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 31-10-2006 02:54 » 

Я в кучу ничего не собирал Улыбаюсь и про cpp вообще не говорил.

Тогда как объяснить "плавный" переход от
Небось, stdafx.h.
к
А что, никто не практикует отключение этого, на мой взгляд, безобразия в проектах?

Какого такого "этого"? Причём здесь stdafx.h и PCH? Вместо stdafx.h может быть какой угодно файл. Назови его global.h, common.h и тд. Это просто заголовочный файл, в который собраны стандартные для данного типа проекта, с точки зрения разработчиков, вещи. Для PCH это не имеет значения. Ты можешь прекрасно использовать stdafx.h и при отключенном PCH. Другое дело, что именно этот файл выбран дефолтно для PCH и вот тут решающую роль играет stdafx.cpp. Никто и не говорит, что ты про него говорил, просто используя дефолтные настройки студии для PCH ты компилишь именно этот файл. Попробуй проделать следущий эксперимент: включи PCH и выброси stdafx.cpp (именно cpp-файл) из проекта и посмотри сможешь ты компильнуть проект или нет. Ага
"Казалось бы, причём здесь stdafx.cpp?"  Ага

Вот и получается, что ты сгрёб до кучи stdafx.h и PCH. Или тогда совсем ничего не понятно, к чему ты про PCH вообще стал говорить? А если совсем серьёзно, то я не понимаю, как на основе такой скудной инфы faudel, которому судя по всему, это всё на фиг не надо, вы уже ставите какие-то диагнозы?

Цитата
P.S. Кстати, аргументы "Есть там-то." и "Мы пользуемся." какие-то сомнительные Улыбаюсь. Вот "Экономит 15 минут на сборке." - это уже более весомо. Только непонятно, каков объём и структура проекта? Что включено в PCH, а что подключается отдельно? Как часто происходит полная пересборка проекта, на которой экономятся упомянутые 15 минут?

Ну что ж. Резонное замечание. Я просто выдал как есть, как-то не задумываясь о необходимости доказывать. Ты вот тоже только голословно заявил, что это "безобразие". Не так ли? "Чёткая межмодульная связность" - без конкретного примера, когда именно этой связности помешал PCH, не более чем набор умных слов.  Да и высказывание в стиле "не думаю" тоже не тянет на полновесный аргумент. Ага  Так что ждёмс примерчиков.

Ну, а я в свою очередь, чтобы не быть голословным, попытаюсь ответить на поставленные вопросы и приведу, в качестве примера, один из текущих "живых" проектов.

Сарзу оговорюсь - абсолютно точных цифр (типа время компиляции с PCH уменьшается в 3,45962 раз) тебе никто не сможет представить. Тк всё зависит от конкретной сиутации и условий, сколько h-файлов задействовано, какие изменения были сделаны, где были эти изменения сделаны и тд. Но примерную количественную оценку на основании нижеизложенного можно будет сделать (я надеюсь). Для этого я буду так же приводить параметры железа, чтобы учесть фактор производительности современных машин. ХОтя кончено не знаю насколько используемое железо отвечает современным требованиям.

Итак, раз вы хотите цифр, их есть у меня. Текущий проект 405 h-файлов (в сумме 1.831.200 Bytes)  и 367 cpp-файлов (в сумме 6.563.195 Bytes). Коментариев очень мало (не люблю я это дело), так что считай 90% - чистый код. Хотя для PCH важно количество заголовочных файлов и их многочисленное включение в срр. Используются след. включения в stdafx.h

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxdtctl.h>      // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>         // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#include "GdiplusH.h"      // Include this for DEBUG NEW MACRO
#include <BCGCBProInc.h>         // BCGPro Control Bar
#include "defines.h"
#include <wchar.h>
#include <rpc.h>
#include <mapi.h>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <set>
#include "RegHelper.h"
#include "MPRect.h"
#include <afxdhtml.h>
#include <afxdlgs.h>
#include <Winspool.h>
#include <imm.h>
#include "Markup.h"
#include <afxsock.h>
#include <atlpath.h>
#include "MessageBoxDialog.h"

полная перекомпиляция  только EXE-файла, то с чем я непосредственно работаю, (rebuild) занимает до 10 минут - обычно 9 с копейками на P4 2GHz 1G RAM.  На более медленных системах до 15 минут (колега работает на laptop примерно такой же конфигурации). Нетрудно подсчитать, что 5ти-6ти кратная перекомпиляция за день занимает больше часа - ессно рабочего времени. Самый быстрый результат - на домашнем компе P4 3 GHz HT 1G RAM - от 5 до 6 минут.
Ну а теперь немного поиграем в цифры - час рабочего времени стоит клиенту приблизительно (зависит от доп. условий) от 70 до 120 евро. Вот и представь, как тебе придётся объяснять, что ему надо выложить кругленькую сумму в месяц (а проекты подобного типа длятся несколько лет! - этому в декабре будет 3 года) за приобретение "чёткой межмодульной связности и избирательности в подключении тех или иных библиотечных возможностей". Ага
Поскольку, с выключенным PCH придётся, в худшем случае, затрачивать примерно столько же времени на простую компиляцию при незначительных изменениях.

Насколько часто приходится компилировать в реальных боевых условиях (если честно я раньше как-то не задумывался над этим) тоже совсем свеженький пример. Недавно получаю задание исправить баг.
Часто бывает, что  в больших проектах по запарке изменения в одной части проги, влекут за собой неадекватные изменения в совсем другой части, и так же случается, что ты эти изменения не замечаешь. Сказываются они в том, что перестаёт работать та или иная фича, или начинает работать по другому. Так получилось и в этот раз. Причём, я точно знал, что фича работала. Загрузил тестера (у него хранятся практические все версии экзешников), он нашёл методом половинного деления нужную мне пару работает-не работает. 9 ноября 2005 года (прикольно, что неправильную работу фичи заметили только через год Улыбаюсь )  Поскольку у нас установлен скрипт для автоматического увеличения build версии, можно ясно видеть, что одна версия была релизнута (отдана на сьедение тестеру) в 14:40, а следущая за ней в 14:51 - те всего 11 минут спустя и при этом было около 20 компиляций (может быть меньше - точно не помню - файлы на работе завтра, в смысле сегодня днём выложу точно). Восстановил историю в Vault, и определил, что "набедокурил" колега, после чего с чистой совестью перенаправил баг ему. Конечно такая частота компиляций дело исключительное, но поверь мне на слово, она приходится именно на день непредвиденной сдачи, когда клиент выясняет, что у него внезапно, через пару дней открывается выставка, на которой ему надо "хоть что-нибудь показать", или вдруг выходит в России некий журнал и в него надо срочно пложить несколько тысяч СД с русской демо версией. В такие моменты дорога каждая секунда.

Вот такое вот безобразие. Ага

И всё-таки непонятно, как прекомпилированная инфа может помешать в процессе обучения и повлиять на межмодульную связанность? Желательно с примером.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 31-10-2006 06:03 » 

модульность и PCH вещи вполне совместимые
выносим туда только общие заголовочные файлы(BOOST, STL и т.п.) и порядок

что касается времени, то в нашем случае(команда разработки и как её часть)
отключенение PCH в автосборке, увеличит время сборки на 2 часа
а и индивидуальная сборка собираться будет дольше, оно мне надо каждый раз ждать пока про инстанцируются всякие шаблоны из буста, не надо значит всякие shared_ptr, bind, vector, map и прочее выкидываем в StdAfx.h

Админы, наверное следует вытащить из темы кусок о StdAfx.h(PCH) и выделить в отдельную тему
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 31-10-2006 06:36 » 

Цитата: Джон
Тогда как объяснить "плавный" переход
Очень просто. Там нет никакого перехода - ни плавного, ни резкого Улыбаюсь

Цитата: Джон
Причём здесь stdafx.h и PCH? Вместо stdafx.h может быть какой угодно файл.
При том, что он VS создаётся по умолчанию Улыбаюсь. Мы же в разделе для начинающих находимся. Вряд ли начинающий, получив ошибку компилятора и пожаловавшись о ней на форум, предварительно что-то перенастраивал со знанием дела. Тут два варианта: либо он ничего не перенастраивал, поскольку и не подозревал, тогда файлы имеют имена stdafx.h и stdafx.cpp, либо он бы не спрашивал, почему не собирается. Улыбаюсь

Цитата: Джон
Ты вот тоже только голословно заявил, что это "безобразие". Не так ли? "Чёткая межмодульная связность" - без конкретного примера, когда именно этой связности помешал PCH, не более чем набор умных слов.  Да и высказывание в стиле "не думаю" тоже не тянет на полновесный аргумент.
Высказывание с примечанием "по-моему" означает, что у меня есть некое мнение, которое я никому не навязываю, но тем не менее имею на него право, и что обсуждение этого мнения будет offtop'ом для данной темы.

Выходит, и слова про "15 минут" - пустые, без конкретного примера. Разница только в том, что я поверил в "15 минут экономии", а ты не поверил в нарушение чёткой межмодульной связности.

Мне одно непонятно, как в такой агрессивной атмосфере обсуждения можно спокойно обмениваться мнениями. Если другое мнение априори считается за ересь, практика показывает, спор будет бесконечным. Предлагаю сбавить обороты и вырезать вопрос в отдельную тему, перенеся её в форум "С/С++".

А теперь по пунктам.

Во-первых, все хедерники (обычно системных библиотек) свалены в общую кучу безотносительного того, какому cpp какие из них на самом деле нужны. В самом деле, если в каждый cpp включать "на всякий случай" всё, что только можно - напрягать компилятор на дополнительные 2 Мб к каждому файлу - тормоза будут страшные.

Цитата: Джон
полная перекомпиляция  только EXE-файла, то с чем я непосредственно работаю, (rebuild) занимает до 10 минут - обычно 9 с копейками на P4 2GHz 1G RAM.  На более медленных системах до 15 минут (колега работает на laptop примерно такой же конфигурации). Нетрудно подсчитать, что 5ти-6ти кратная перекомпиляция за день занимает больше часа - ессно рабочего времени.
Если для программы требуется полный ребилд 5-6 раз в сутки, сразу встаёт вопрос, каким образом эта программа разбита на модули? Проще говоря, зачем столь часто делать полный ребилд в нормально спроектированной и грамотно разбитой по модулям программе? Не может программист за сутки полностью перелопатить 6 Мб кода (если не copy-paste методом программировать). Таким образом, каждый раз сборке подвергаются 1-3 cpp файла, и либо мы не имеем почти никакого выигрыша (в случае 1-го файла), либо он минимален - не более нескольких секунд-минуты.

Цитата: Джон
Ну а теперь немного поиграем в цифры - час рабочего времени стоит клиенту приблизительно (зависит от доп. условий) от 70 до 120 евро. Вот и представь, как тебе придётся объяснять, что ему надо выложить кругленькую сумму в месяц (а проекты подобного типа длятся несколько лет! - этому в декабре будет 3 года) за приобретение "чёткой межмодульной связности и избирательности в подключении тех или иных библиотечных возможностей".
Можно ещё посчитать, во сколько обходится клиенту неорганизованность. А потом сравнить Улыбаюсь.

Цитата: Джон
Часто бывает, что  в больших проектах по запарке изменения в одной части проги, влекут за собой неадекватные изменения в совсем другой части, и так же случается, что ты эти изменения не замечаешь. Сказываются они в том, что перестаёт работать та или иная фича, или начинает работать по другому. Так получилось и в этот раз.
Ну вот ты и подтвердил, что структурно система представляет собой набор модулей, связанных чуть не каждый с каждым. Естественно, что изменение в одной части немедленно отзовётся эхом во всех других частях. А теперь честно посчитай, во сколько обходится заказчику метод отладки: "Исправляем баг - порождаем 10 новых."

Цитата: Джон
Вот такое вот безобразие.
Согласен Улыбаюсь
« Последнее редактирование: 16-12-2007 13:59 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 31-10-2006 06:38 » 

Цитата: LogRus
модульность и PCH вещи вполне совместимые
выносим туда только общие заголовочные файлы(BOOST, STL и т.п.) и порядок
Вот это уже более разумно. И то, опять же, не всякому cpp нужны все заголовочные файлы указанных библиотек.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #8 : 31-10-2006 06:50 » 

dimka, не все а наиболее популярные. включение всего подрят кроме прочего имееет следующее последствие: "Ошибка 1055"
Улыбаюсь при забавная вещь компьлятор(VC 7.1) заявляет, что у него закончился хэш для имён переменных, методов и т.п.

согласен про не всякому cpp нужен весь набор из PCH, НО прогрмамирование это поиск компромисов(в какой-то умной книжке вычитал Улыбаюсь или журнале) в нашем случае, выбрали немного избыточный PCH файл, ради удобства и скорости сборки.
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 31-10-2006 09:27 » 

Цитата: LogRus
включение всего подрят кроме прочего имееет следующее последствие: "Ошибка 1055"
Хм, впервые узнал о её существовании Улыбаюсь Хотя размеры исходников отдельных проектов в моих окрестностях у людей измеряются сотнями Мб, а один проект даже за 1 Гб перевалил. (Естественно, не всё сами писали Улыбаюсь ). Видимо, "чёткая межмодульная связность" пока хранит Улыбаюсь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #10 : 31-10-2006 09:40 » 

Есть один у нас файлик не то чтобы большой(5к), НО в нём делается инстанцирование кучи шаблонов очень их нужно явно инстанцировать, если всё в один собрать, то кидается эта ошибка.
Это не смотря на то что модуль сильно изолирован и не зависим от прочих.
но это уже флейм.
Записан

Странно всё это....
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 31-10-2006 13:52 » 

dimka, сразу -  в чём ты видишь агрессию? В том, что я "потребовал" от тебя того, что ты "потребовал" от меня? В таком случае ты начал с "агрессии". Ага Лично у меня нет никакого желания ни ссориться ни ругаться. ИМХО обсуждаем нормальный вопрос (который правда удалился от темы, если вообще имеет хоть какое-то отношение к ней - тут я с тобой полоностью согласен, поэтому я сначала обращусь непосредственно к теме, а потом продолжим насчёт PCH). Я совершенно серьёзно отношусь к твоему требованию доказательств, без ехидства и тд. Особенно потому, что мы находимся именно в теме для начинающих. И я не хочу (думаю и ты тоже), чтобы у начинающих сложился комплекс в отношении PCH, только потому, что dimka назвал это безобразием, или наоборот, что кто-то начнёт бездумно использовать PCH, только потому, что Джон и  LogRus его тоже используют.

Если ты с этим согласен, то продолжим разговор. Единственное, к чему я призываю - быть корректным в высказываниях. И не просто хочу "докопаться", а действительно хочу понять какая связь между сообщением faudel, stdafx.h и PCH? И потом, почему ты думаешь, что доп. информация повредит мне, или LogRus?

Ещё раз:
Цитата: Джон
Причём здесь stdafx.h и PCH? Вместо stdafx.h может быть какой угодно файл.
При том, что он VS создаётся по умолчанию Улыбаюсь.

С чего ты взял? Я уже говорил, что только в определённых типах проектов. Откуда ты знаешь, что faudel использует именно stdafx.h? Самый простой проект можно сделать так: New -> Project->Win32->Win32 Console Project)->В визарде Application settings->Additional options: Empty project, добавляем в него пустой cpp-файл, пишем код
Код:
#include<iostream>
 int main()
{
     std::cout<<"Hello world\n";
     return 0;
}

И всё великолепно работает. Ага Без всяких stdafx.h и PCH. Да даже не в этом дело.

Цитата
Мы же в разделе для начинающих находимся. Вряд ли начинающий, получив ошибку компилятора и пожаловавшись о ней на форум, предварительно что-то перенастраивал со знанием дела.

1.
Какую именно ошибку он получил мы не знаем:
была выявлена ошибка в написании

Может просто кириллица редактором не поддерживается? Может что ещё? Тут мы можем фантазировать и придумывать решнеия  пока врач не придёт.
2.
И потом, он получил её не в VS, а в DevC++. Как раз в VS всё работает (причём как с так и без stdafx.h и .cpp). Про кириллицу в консоле не так давно, с примерами я уже разбирал с кем-то (сорри, не помню с кем), так что ему надо просто поискать на форуме. Так что

Цитата
Цитата: Джон
Ты вот тоже только голословно заявил, что это "безобразие". Не так ли? "Чёткая межмодульная связность" - без конкретного примера, когда именно этой связности помешал PCH, не более чем набор умных слов.  Да и высказывание в стиле "не думаю" тоже не тянет на полновесный аргумент.
Высказывание с примечанием "по-моему" означает, что у меня есть некое мнение, которое я никому не навязываю, но тем не менее имею на него право, и что обсуждение этого мнения будет offtop'ом для данной темы.

Хм... можно подумать, что кто-то высказывает и отстаивает чужие мнения. Я тоже высказываю только своё мнение, причём не настаиваю, что оно является единственной и не повторимой истинной. Но даже собственное мнение не берётся с потолка, и не меняется по настроению. Оно должно на чём-то основываться, как правило на личном опыте. Поэтому, ты совершенно справедливо сформулировал вопросы, на которые я считаю, необходимо дать ответы. И это правильно!  Если бы мы просто беседовали тут только втроём - LogRus, ты и я,  тобой вдвоём, то это скорее бы всего не имело бы смысла. Но эти сообщения будут читать начинающие. И для них аргументация мнения просто необходима. Иначе всё останется на уровне "Джон сказал", "LogRus упомянул", "dimka отверг" и тд.

Цитата
Выходит, и слова про "15 минут" - пустые, без конкретного примера. Разница только в том, что я поверил в "15 минут экономии", а ты не поверил в нарушение чёткой межмодульной связности.

Ну почему же пустые? Ведь я тебе привёл реальные цифры. Если этого недостаточно, то вот:

с PCH:

------ Rebuild All started: Project: CCDMDemo, Configuration: Debug Win32 ------

Deleting intermediate files and output files for project 'CCDMDemo', configuration 'Debug|Win32'.
Compiling...
stdafx.cpp
Compiling...
WNDialog.cpp
WNComboBox.cpp
MenuButtonList.cpp
MenuButton.cpp
MainFrm.cpp
ImgItem.cpp
DlgSelectLanguage.cpp
DlgQuit.cpp
DlgMessage.cpp
DebugLogger.cpp
ChildView.cpp
CCDMResultCheque.cpp
CCDMResultCash.cpp
CCDMDemo.cpp
CCDMChequeDlg.cpp
CCDMCashDlg.cpp
AppLanguageDescr.cpp
AppConfig.cpp
Generating Code...
Compiling resources...
Linking...
LINK : LNK6004: ..\bin/CCDMDemo.exe not found or not built by the last incremental link; performing full link

Build Time 0:13
Build log was saved at "file://d:\Projects\CCDMDemo\CCDMDemo\Debug\BuildLog.htm"
CCDMDemo - 0 error(s), 0 warning(s)


---------------------- Done ----------------------

    Rebuild All: 1 succeeded, 0 failed, 0 skipped

без PCH:

------ Rebuild All started: Project: CCDMDemo, Configuration: Debug Win32 ------

Deleting intermediate files and output files for project 'CCDMDemo', configuration 'Debug|Win32'.
Compiling...
stdafx.cpp
Compiling...
WNDialog.cpp
WNComboBox.cpp
MenuButtonList.cpp
MenuButton.cpp
MainFrm.cpp
ImgItem.cpp
DlgSelectLanguage.cpp
DlgQuit.cpp
DlgMessage.cpp
DebugLogger.cpp
ChildView.cpp
CCDMResultCheque.cpp
CCDMResultCash.cpp
CCDMDemo.cpp
CCDMChequeDlg.cpp
CCDMCashDlg.cpp
AppLanguageDescr.cpp
AppConfig.cpp
Generating Code...
Compiling resources...
Linking...
LINK : LNK6004: ..\bin/CCDMDemo.exe not found or not built by the last incremental link; performing full link

Build Time 0:45
Build log was saved at "file://d:\Projects\CCDMDemo\CCDMDemo\Debug\BuildLog.htm"
CCDMDemo - 0 error(s), 0 warning(s)


---------------------- Done ----------------------

    Rebuild All: 1 succeeded, 0 failed, 0 skipped

Цитата
Мне одно непонятно, как в такой агрессивной атмосфере обсуждения можно спокойно обмениваться мнениями. Если другое мнение априори считается за ересь, практика показывает, спор будет бесконечным. Предлагаю сбавить обороты и вырезать вопрос в отдельную тему, перенеся её в форум "С/С++".

Стоп, где это говорилось, что "другое мнение - ересь"? Где я сказал, что ты не прав, или намекнул на это? Что тебя так обидело-то?

Цитата
А теперь по пунктам.

На все пункты я отвечу коротко, не вдаваясь в подробности каждого пункта. Речь не идёт о том, что надо было бы сделать всё по уму, тогда бы и проблем не возникало бы. Проект бездарен, но он существует, и с ним надо работать. Вся проблема заключается в том, что всё про что ты говоришь - это всё теория, которая поверь (тут тебе действительно лучше поверить мне на слово, иначе мне придётся описывать практически каждый день работы над проектом, в качестве доказательства) ооочень далека от практики.
Дорогие мои теоретики, любимые до слёз, нет и не бывает идеальных заказов, как не бывает идеальных клиентов, которые бы чётко и ясно объяснили, что именно они хотят, а потом бы сидели тихо как мышки до релиза. И как правило ошибки, типа той, про которую я упомянул, следствия не именно несуразных требований клиентов. Всё-таки надо открыть темку и рассказывать про реальную жизнь программистов, которая ох как далека от малины. Понимаешь, все эти диаграммки, структурки, модульки - хороши на бумаге на начальной стадии проекта.
Но вот проходит полгода, выпущена первая бета, клиент вонзает в неё свои зубы и... Блииин, а вот это не так, а это не эдак. А вот тут мне нужна кнопка, которая ... Но вот ведь твои требования, твоя подпись. Ну это всё понятно, но мы не можем с ЭТОЙ прогой работать. Надо менять. А как менять? Всё? И начинать с нуля? Да что ты, что ты! Вот тут чуть-чуть поменяем, вот тут исправим. В итоге запланированные фичи выкидываются из плана, их бюджет идёт на переделку существующих фич. Идёт НОРМАЛЬНАЯ подгонка проги под клиента. И это просто праздник когда удаётся исправить фичу полностью, а не делать workaround. Есть такое эмпирическое правило, на первые 90% проекта, у тебя уходит 10% времени. Остальные 90% времени уходят на оставшиеся 10%. И это правило не так уж далеко от истины.
Теперь добавь сюда, что проект делается 2-4 программерами. Каждый отвечает за свою часть и, несмотря на методы ЕП и все ТЕОРЕТИЧЕСКИЕ желания каждого, всё-равно каждый отвечает и хорошо разбирается ТОЛЬКО в "своей" части проги. Но потом начинается аврал.
Колега в отпуске, а мне надо за пару часов исправить ошибку в "его" части. С ошибками ещё куда не шло. А вот когда тебя просят срочно (в 9 пришёл на работу, в 11 должно быть готово) расширить например парсер чужих форматов "да это как вон тот формат, только чуть-чуть по другому". Вот тут-то всё и начинается. И слёзные уверения, что любая ф-я которую я программирую должна начинаться с теста, и тыканья в ISO-сертификат, согласно которому мы не имеем права ничего сдавать не протестировав, ничего не приносят. Есть такое слово НАДО. Ессно клиент берёт всю ответственность на себя, "кто её платит, тот её и танцует" и версия выходит.
Единственное, что я до сих пор никак не могу понять, как нашим менеджерам удаётся сохранять лицо фирмы да ещё и получать благодарности за отличную прогу. Всё-таки, наверное, ценности заключаются совсем в другом.
Надо пересматривать менталитет. Ладно, отклонился. Продолжаю, когда пробуешь вякнуть, что подобные вещи надо бы позже передалать, тебе сочувственно поддакивают, дескать надо, дык бюджета на это не выделено. Так что оставь как есть, если кому-то не понравится - пусть платят - переделаем. Когда через полгода, или как ты видел через год, ксати совсем забыл, ща на работе, вот данные компиляций, я немного загнул с числом компиляций:

2.1.21.5007 14:40
2.1.22.5020 14:51

Те тестер получил сначала версию 2.1.21, а через 11 минут 2.1.22 за это время программер компильнул её 13 раз.
Кстати очень типично для релизной горячки, когда приходится исправлять недочёты, мелочи "на лету".

Продолжаю. Так вот через год, если найдут ошибку. Уже конечно никто не помнит, почему так произошло и кто виноват. Тут и приходять на помощь средства "персональной" документации. Потычешь бумажками в носы всех этих деятелей и опять они сидят, да думают, какую бы ещё фичу выкинуть или проще сделать, чтобы эту дыру заткнуть. Вот так-то. А все красивые картиночки UML да чёртёжики, напоминают только о первых месяцах проекта, когда всё было так хорошо и жизнь казалась прекрасной. И ещё одно должен сказать за те почти восемь лет, что я в профессиональном программерском бизнесе НИ РАЗУ не было иначе.

Насчёт перекомпиляций. Да, в идеальном случае не требуется перекомпилировать ВЕСЬ проект каждый раз. Тут ты абсолютно прав. Да и не делаем мы этого. Но, есть два маленьких "но".
1. Я говорил об оценочном времени, которое будет затрачено даже на обычную компиляцию без PCH.
2. Я не знаю, как у других, но у нас используется студия VS от микрософт. И в 6ой версии и в .NET 2003 есть такая особенность. В больших проектах она не всегда компилирует всё, что надо. Изменяешь .срр, она показывает, что компилит именно этот срр. НО в дебагере, либо точки останова игнорируются, либо новый код просто перепрыгивается. И средство (установлено эмпирическим путём) только одно - полная перекомпиляция.
Такое происходит, как правило если сразу большие участки кода будут изменены. Тут сразу, как закон, получл последнюю версию - перекомпилируй всё. Тут уж ничего не поделаешь.

зы Сорри за сумбурность, писал урывками. Тему разобью и перенесу вечером.
« Последнее редактирование: 16-12-2007 17:26 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 31-10-2006 20:24 » 

Хм... а где мой пост в ответ на #21... Придётся восстанавливать по памяти.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 31-10-2006 20:48 » 

dimka, если что-то из тему удалили, то номер втоего поста может измениться.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 31-10-2006 20:53 » 

dimka, я ещё ничего не удалял и не переносил. После 21 я сразу написал, про с какого топика разделять, на что мне LogRus практически сразу ответил. И тд
Ты примерно когда отвечал? Я твоего ответа не видел. После 21го.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 31-10-2006 21:45 » 

Цитата: Джон
действительно хочу понять какая связь между сообщением faudel, stdafx.h и PCH? И потом, почему ты думаешь, что доп. информация повредит мне, или LogRus?
Связь та, что в VC++ файл stdafx.h по умолчанию имеется, предназначен для PCH и без #include "stdafx.h" возникает ошибка "Не найден конец файла". Эта информация не повредит ни тебе, ни LogRus'у, зато повредит теме, являясь offtop'ом.

Цитата: Джон
С чего ты взял? Я уже говорил, что только в определённых типах проектов. Откуда ты знаешь, что faudel использует именно stdafx.h? Самый простой проект можно сделать так: New -> Project->Win32->Win32 Console Project)->В визарде Application settings->Additional options: Empty project, добавляем в него пустой cpp-файл, пишем код
С того я взял, что по умолчанию галка "Empty Project" снята. Почти никогда начинающие на вкладку "Application settings" не заходят. Более того, даже студенты, которым специально всё разяснено, и то в 50% случаев не обращают должного внимания на этот тонкий момент и создают проекты, в которых получают вышеозначенную ошибку. Напомню, что мы тут будто бы для начинающих разговариваем. Но, опять же, это offtop.

Цитата: Джон
И потом, он получил её не в VS, а в DevC++
Вот на это я внимания не обратил. Тем более злостным offtop'ом является всё написанное Улыбаюсь

Цитата: Джон
Ну почему же пустые? Ведь я тебе привёл реальные цифры.
Тут я стану скучным. Есть такие понятия, как "параметр", "показатель" и "критерий". Чтобы о чём-то делать заключения, нужно иметь критерии, а "реальные цифры" - это лишь параметры. 30 секунд ни о чём не говорят, если неизвестно, что считается. Если считаются деньги, то стоимость проекта определяется не только временем. PCH придётся рассматривать в комплексе, в рамках некой модели проекта.

Далее про теоретиков. Дорогие мои практики! Можно сколько угодно заявлять, что вот, дескать, у нас тут реальность, у нас тут авралы, у нас тут неадекватные клиенты. Однако не менее реально то, что подобные клиенты почти у всех бывают, а работа команд проектов организована различно, и результат различен. Клиенту всегда хочется 9 шапок. Можно? Можно! Далее по известному мультфильму.

И если вы полагаете, что авралы являются нормальным, естественным состоянием проекта - это ваше личное дело. Однако на это можно точно сказать, что: а) технология разработки и планирование проекта неудовлетворительные; б) чаще всего от нарушения технологии страдает архитектура - размывается со временем; в) качество решения ухудшается; г) бюджет проекта превышает план - падает прибыль как разработчика, так и заказчика; д) у заказчика и разработчика из-за задержек и переработок по проекту могут возникать накладки и затруднения в исполнении других обязательств; е) разработчики работают "на износ" - проще говоря, эксплуатируются; ж) с большой вероятностью можно предположить дезорганизацию и нарушение коммуникации внутри команды разработки. Кому нравится - те продолжают "практиковать" без всяких задних мыслей о том, что можно жить иначе. Все проекты одинаковы, стабильность такой жизни гарантирована. Кому не нравится - обращаются к теории, которая в части программной инженерии и программного менеджмента во многом есть результат систематизации и обобщения эмпирического опыта.

Ведётся ли у вас репозиторий проектов, собирается ли статистика, анализируется ли, проводятся ли "разборы полётов", выявляются ли причины неудач (пусть даже локальных), делаются ли оргвыводы? Конечно, если подход заключается в "срубании бабок", а после хоть трава не расти, то нет никакого смысла такой "фигнёй" заниматься.
« Последнее редактирование: 16-12-2007 17:27 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines