Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Tonal от Ноябрь 27, 2006, 09:14



Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Tonal от Ноябрь 27, 2006, 09:14
Такая проблема: при изменении *.h файла зависимые от него *.cpp не перекомпиляются...
Можно ли, и как прописать в *.pro файле зависимости между *.cpp и *.h файлами?
Или, в идеале, прописать какую-нибудь коммандочку, чтобы эти зависимости сами отстраивались и перегенерялись.
Работаю под Win-дой, компилятор mingw.


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Admin от Ноябрь 27, 2006, 14:09
очень странно! так как должны были обязательно

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

он смотрит на даты фодификации файлов


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Tonal от Ноябрь 27, 2006, 14:25
Оказалось, бага горазда замысловатее, чем я описывал.
Пока чисто воспроизвести не получается.
Может это связано ещё и с SVN-ом.
Так что будем копать дальше. ;-)


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Admin от Ноябрь 29, 2006, 11:10
а SVN то сюда как попал?


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Dendy от Ноябрь 29, 2006, 12:21
Зависимости от файлов - зловредная штука. Иерархия зависимостей компилируемого файла должна бьІть отслежена по самьІе корни ДО процесса компиляции, чтобьІ make мог мгновенно узнать, стоит ли обновлять зависимьІй файл или нет.

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

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

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

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

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

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

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


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Tonal от Ноябрь 29, 2006, 18:30
Цитата: "Admin"
а SVN то сюда как попал?
Как вы версии файлов проекта контролирует. ;-)
У нас не любой проект, длящийся дольше рабочего дня попадает в свин.

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

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

И тем не менее глюки бывают, но к сожалению чисто воспроизвести пока не удаётся.


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Вячеслав от Ноябрь 29, 2006, 19:00
А это не FAT случаем ? А то тама вееесело было со временем модификации файла - 5 бит на секунды => считаем каждую вторую ;)


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Dendy от Ноябрь 29, 2006, 20:13
Есть весёльІе случаи с компиляцией фантастических исходников из будущего. Но тут еффект бьІл бьІ обратньІй: сколько ни собирай - время зависимостей будет больше и make честно ребилдит всё подряд. Ибо для него етот модерн всегда новее текущего времени.


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Tonal от Ноябрь 30, 2006, 07:48
Цитата: "Вячеслав"
А это не FAT случаем ?

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

А вот это идея.
Синхронизировали на машинах время, будем смотреть дальше.


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Admin от Ноябрь 30, 2006, 11:43
я про багу со временем писал уже
и вообшще пользуйте precompiled headers
сильно ускоряет


Название: [Qt 4.2.x] Зависимости от *.h файлов
Отправлено: Tonal от Ноябрь 30, 2006, 11:46
Про время - очень похоже.
precompiled headers - это да. Надо. ;-)
Всем спасибо.
Если что ещё проясниться - отпишусь.