Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: QCasper от Сентябрь 28, 2007, 11:03



Название: Precompiled headers
Отправлено: QCasper от Сентябрь 28, 2007, 11:03
Раньше все как-то не связывался, но тут решил попробовать, прочитал значит статейку1, все сделал, все клево работает. Одна проблема, допустим у меня куча проектов, они все генерят свой собственный *.pch файл и используют его потом. А как сделать, чтобы они все использовали один такой файл, который был сгенерен заранее?

1. http://wiki.qtcentre.org/index.php?title=Precompiled_headers (http://wiki.qtcentre.org/index.php?title=Precompiled_headers)


Название: Re: Precompiled headers
Отправлено: Dendy от Сентябрь 28, 2007, 13:47
Рекомендую этим не заниматься. Прекомпиленые заголовочники могут быть использованы вместо обычных только если выполнен ряд условий: Совпадение параметров компиляции, архитектуры, путей, директив, содержимого исходного кода такого заголовочника и так далее. Что будет, если в каком-то проекте вы захотите помимо <QtCore> <QtGui> добавить, к примеру, <string.h>? Или начнёте играться с оптимизациями -O2, -O3, -Os? Или вы собираетесь держать гигабайты всевозможных комбинаций у себя на жёстком диске? Прекомпиленые заголовочники - способ оптимизации сборки, результатом которой является временный вспомогательный файл. И как и все временные файлы он не должен пересекаться с продуктами компиляции других программ и в любой момент может быть удалён.


Название: Re: Precompiled headers
Отправлено: QCasper от Сентябрь 28, 2007, 13:55
Что будет, если в каком-то проекте вы захотите помимо <QtCore> <QtGui> добавить, к примеру, <string.h>? Или начнёте играться с оптимизациями -O2, -O3, -Os? Или вы собираетесь держать гигабайты всевозможных комбинаций у себя на жёстком диске?

Перекомпилю этот файл заново.

Прекомпиленые заголовочники - способ оптимизации сборки, результатом которой является временный вспомогательный файл. И как и все временные файлы он не должен пересекаться с продуктами компиляции других программ и в любой момент может быть удалён.

Согласен, но тем не менее он может быть опять восстановлен и опять использован.


Название: Re: Precompiled headers
Отправлено: Dendy от Сентябрь 28, 2007, 14:38
Технически проблем нет. Можно создать папку, в которой будут лежать стопкой:
ph-qtcore4.3-qtgui4.3-qtnetwork4.3-...<all headers with versions>-...gcc4.1-x86-Og-...<all compiler options>-D...<additional defines>...<and so on>

Рядом с ним будет генериться такой же pch файл. Кроме того потребуется создать универсальные правила по собиранию информации о проекте с генерацией таких имён, и не дай вам Бог что-то пропустить. Эти правила будут навязываться остальным пользователям, которым вы передадите проект. Неиспользуемые прекомпиленые заголовочники будут лежать мёртвым грузом. Изменение "универсальной" сигнатуры приведёт к пересозданию файлов.

Спрашивается, оно вам нужно? Чего хоть добиваетесь? Экономии места на диске или времени сборки? Сомневаюсь, что есть выгода и в первом и во втором.


Название: Re: Precompiled headers
Отправлено: QCasper от Сентябрь 28, 2007, 15:56
Чего хоть добиваетесь? Экономии места на диске или времени сборки? Сомневаюсь, что есть выгода и в первом и во втором.

Добиваюсь второго. Хорошо, какое решение данной задачи вы считаете оптимальным и можете посоветовать?


Название: Re: Precompiled headers
Отправлено: Dendy от Сентябрь 29, 2007, 02:23
Всё просто - в каждой сборке проекта генерация своего заголовочника.

Может быть я неверно понял и вам нужно использовать одни и те же прекомпиленые заголовочники внутри связанной цепочки проектов.


Название: Re: Precompiled headers
Отправлено: QCasper от Сентябрь 29, 2007, 10:53
Всё просто - в каждой сборке проекта генерация своего заголовочника.

Понятно, в конечном итоге я так и сделал. Просто хотел обойти генерацию заголовочника на каждом проекте.