Russian Qt Forum
Ноябрь 22, 2024, 23:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.2.x] Зависимости от *.h файлов  (Прочитано 7432 раз)
Tonal
Гость
« : Ноябрь 27, 2006, 09:14 »

Такая проблема: при изменении *.h файла зависимые от него *.cpp не перекомпиляются...
Можно ли, и как прописать в *.pro файле зависимости между *.cpp и *.h файлами?
Или, в идеале, прописать какую-нибудь коммандочку, чтобы эти зависимости сами отстраивались и перегенерялись.
Работаю под Win-дой, компилятор mingw.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Ноябрь 27, 2006, 14:09 »

очень странно! так как должны были обязательно

PS: есть такой глючек, если время модификации cpp и h разное
тоесть как бы cpp в будущем а h в прошедшем то копмилятор творит такие вещи

он смотрит на даты фодификации файлов
Записан
Tonal
Гость
« Ответ #2 : Ноябрь 27, 2006, 14:25 »

Оказалось, бага горазда замысловатее, чем я описывал.
Пока чисто воспроизвести не получается.
Может это связано ещё и с SVN-ом.
Так что будем копать дальше. ;-)
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Ноябрь 29, 2006, 11:10 »

а SVN то сюда как попал?
Записан
Dendy
Гость
« Ответ #4 : Ноябрь 29, 2006, 12:21 »

Зависимости от файлов - зловредная штука. Иерархия зависимостей компилируемого файла должна бьІть отслежена по самьІе корни ДО процесса компиляции, чтобьІ make мог мгновенно узнать, стоит ли обновлять зависимьІй файл или нет.

Из оболочки ето делается легко. Та же студия хранит свои временньІе файльІ зависимостей и постоянно их отслеживает на лету.

Но при компиляции через Makefile вьІлезают грабли. Ибо стоит нам добавить включение нового заголовочника - вьІшестоящая ветка пересоздастся, НО(!) зависимость от нового заголовочника не добавится и как следствие - изменение тела етого нового заголовочника не отразится на сборке. Error.

Процесс генерации зависимостей процесс тяжёльІй. Шутка ли - перегрести ВСЕ исходники своего проекта и всех библиотек, что в нём используются.

ПрофессиональІ рекомендуют прописьІвать правила, создающие для каждого исходника в проекте свой Makefile с зависимостями, которьІй автоматически будет пересоздаваться при изменении одной из них. Ето самьІй рациональньІй метод из существующих.

В Qt сборкой зависимостей занимается qmake. Делает ето достаточно еффективно для всего проекта сразу. При всей кажущейся избьІточности (каждьІй раз шуршать по исходникам и полностью пересоздавать Makefile) делает он ето более чем бьІстро. Гораздо бьІстрее, чем при создании Makefile'ов отдельно для каждого исходника проекта.

Так что когда в документации по сборке пишут:
qmake
make

- делают ето не зря. Даже если .pro файл не изменялся после последней генерации Makefile'а. Если бьІла изменена зависимость - будьте готовьІ к тому, что проект соберётся НЕПРАВИЛЬНО при использовании одной лишь:
make
Знайте, ето не глюк. Не нужно чистить проект под чистую и пересобирать его. Нужно всего-лишь пересоздать Makefile и запустить процесс билда снова.
Записан
Tonal
Гость
« Ответ #5 : Ноябрь 29, 2006, 18:30 »

Цитата: "Admin"
а SVN то сюда как попал?
Как вы версии файлов проекта контролирует. ;-)
У нас не любой проект, длящийся дольше рабочего дня попадает в свин.

Цитата: "Dendy"
Так что когда в документации по сборке пишут:
qmake
make
- делают это не зря.

qmake ProgName.pro и прописано в Slick-е на как Pre Build Command.

И тем не менее глюки бывают, но к сожалению чисто воспроизвести пока не удаётся.
Записан
Вячеслав
Гость
« Ответ #6 : Ноябрь 29, 2006, 19:00 »

А это не FAT случаем ? А то тама вееесело было со временем модификации файла - 5 бит на секунды => считаем каждую вторую Подмигивающий
Записан
Dendy
Гость
« Ответ #7 : Ноябрь 29, 2006, 20:13 »

Есть весёльІе случаи с компиляцией фантастических исходников из будущего. Но тут еффект бьІл бьІ обратньІй: сколько ни собирай - время зависимостей будет больше и make честно ребилдит всё подряд. Ибо для него етот модерн всегда новее текущего времени.
Записан
Tonal
Гость
« Ответ #8 : Ноябрь 30, 2006, 07:48 »

Цитата: "Вячеслав"
А это не FAT случаем ?

Издеваешься? ;-)
Цитата: "Dendy"
Есть весёльІе случаи с компиляцией фантастических исходников из будущего.

А вот это идея.
Синхронизировали на машинах время, будем смотреть дальше.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Ноябрь 30, 2006, 11:43 »

я про багу со временем писал уже
и вообшще пользуйте precompiled headers
сильно ускоряет
Записан
Tonal
Гость
« Ответ #10 : Ноябрь 30, 2006, 11:46 »

Про время - очень похоже.
precompiled headers - это да. Надо. ;-)
Всем спасибо.
Если что ещё проясниться - отпишусь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.