Как собрать qt из исходников

Последние несколько дней я много искал на форумах Qt и в Google, но не смог найти очевидного ответа на этот вопрос.

Я нашел параметр -prefix (даже не задокументированный в Windows), который может быть предоставлен для настройки, чтобы указать другой каталог установки, но это вообще не четкое разделение исходников и двоичных файлов, поскольку сборка все еще выполняется в исходном каталоге, а затем файлы, необходимые для установки, копируются в каталог установки. Я попробовал этот вариант -prefix и столкнулся с некоторыми проблемами. (т.е. он не копирует файлы .pdb в каталог установки.)

Затем я нашел эту ссылку о создании теневых сборок, но она имеет большое ограничение, что каталог сборки должен быть на том же уровне, что и исходный каталог.


Я предполагаю, что вы не пробовали make install? Так что попробуй. Он должен установить Qt в отдельный каталог вдали от исходников.

Вы говорите, что после того, как я настрою, я должен выполнить установку nmake, а не просто nmake? Я знаю, что nmake обработает сгенерированные make-файлы из qmake и поместит их в исходный каталог Qt, но что именно будет делать nmake install, т.е. в какой каталог будут устанавливаться файлы и как указать каталог, в который будут установлены файлы.

Обратите внимание, что я уже делаю это:

configure -prefix builddir -platform win32-msvc2005
nmake install

Результат двух приведенных выше строк заключался в том, что qt был скомпилирован в исходном каталоге, а не непосредственно в моем каталоге сборки, указанном с префиксом. Затем скомпилированные файлы были скопированы в мой builddir. Я надеялся на что-то, что будет собирать мои файлы Qt непосредственно в каталоге сборки, потому что таким образом мне все еще нужно 4 ГБ пространства для моего исходного каталога во время компиляции. Также файлы pdb не были скопированы в мой buildir, что является еще одной проблемой.


person user152508    schedule 07.08.2009    source источник
comment
Можно ли построить с помощью cmake?   -  person Karl Voigtland    schedule 07.08.2009
comment
Это описывает сборку для Qt вне исходного кода: holoborodko.com/pavel/2011/02/01/   -  person Dan    schedule 03.01.2012


Ответы (4)


По сути, вам просто нужно запустить configure.exe из каталога сборки. Например:

mkdir \qt\4.5.2-build
cd \qt\4.5.2-build
set PATH=%cd%\bin;%PATH%
\qt\4.5.2-sources\configure.exe -platform win32-msvc2005

Если исходники находятся в \qt\4.5.2-sources, это приведет к тому, что сборка переместится в \qt\4.5.2-build на текущем диске.

Кроме того, у вас должен быть perl в вашем PATH, рекомендуется ActiveState Perl.

Раньше я не слышал об этом ограничении, когда каталоги сборки и исходного кода должны быть на одном уровне. Если вы столкнулись с этой проблемой, вы можете попытаться обойти ее, создав символическую ссылку (см. команду mklink).

person rohanpm    schedule 07.08.2009
comment
Это не работает. Ошибка говорит, что он не может включать какой-то файл .h - person user152508; 08.08.2009
comment
ошибка возникает во время настройки и говорит, что она не может включать некоторые файлы qscriptengine.h. Также в моей попытке каталог сборки не был на том же уровне, что и исходный каталог (как в вашем учебнике выше). Это актуально? - person user152508; 09.08.2009
comment
Похоже, скрипт syncqt не был запущен. Этот сценарий создает заголовки в дереве сборки, указывающие на исходное дерево. Одна из причин, по которой он может не работать, заключается в том, что у вас не установлен perl и не указан путь. Я добавил комментарий о perl к своему ответу. - person rohanpm; 10.08.2009
comment
Вот моя структура папок: --X --qt --shadow Я хочу создать тень: cd C:/X/shadow C:/X/qt/configure.exe -platform win32-msvc2005421904 У меня также есть тень/bin и путь к perl.exe в моем PATH. И я все еще получаю ту же ошибку во время настройки: c:\x\qt\qmake\project.h(57): фатальная ошибка C1083: не удается открыть включаемый файл: 'qscriptengine.h': нет такого файла или каталога - person user152508; 10.08.2009
comment
Также обратите внимание, что я получаю сообщение об ошибке, когда configure пытается собрать qmake. - person user152508; 10.08.2009
comment
Я не могу поверить, что qmake не поддерживает (или, может быть, что-то упускает), чтобы сделать это, т.е. собрать из исходного кода. Это такое общее требование. Как теперь хранить мою библиотеку qt в репозитории? га - person user152508; 12.08.2009
comment
qmake (и configure, и Qt) поддерживают это, и я, и многие другие делают это постоянно. - person rohanpm; 14.08.2009
comment
Подскажите, пожалуйста, как это сделать пошагово. Я пробовал все, что я могу думать до сих пор. Спасибо - person user152508; 14.08.2009
comment
ActivePerl является обязательным для сборок вне дерева, а не предложением. @ user152508, вы получаете эту ошибку, потому что скрипту configure не удается скопировать файлы заголовков. Я подозреваю, что у вас нет perl ActivePerl в $PATH. - person ismail; 10.01.2011
comment
У меня та же проблема, что и у @user152508, и у меня определенно есть ActivePerl в моем %PATH%. Это просто не работает. - person asandroq; 04.04.2012
comment
У меня такая же проблема. У меня есть ActivePerl на моем пути; Я получаю множество включенных файлов, не найденных ошибок. Сценарий Perl неправильно меняет пути, но добавляет дополнительный ..\..\ к каждому пути к заголовочному файлу в файлах сборки. - person Oliver Zendel; 26.06.2012

IIRC в Windows, вам нужно выполнить установку в песочнице, вы не можете выполнить типичную для UNIX «установку».

Обычно есть два варианта сборки Qt: -prefix-install и -prefix /foo.

Вы выбираете один, поэтому, если -prefix не позволяет вам ввести make install, то, я думаю, в Windows вы должны использовать маршрут -prefix-install, который представляет собой изолированную установку в каталог, в который вы извлекаете Qt.

Я предполагаю, что вы не пробовали make install? Так что попробуй. Он должен установить Qt в отдельный каталог вдали от исходников.

person mxcl    schedule 07.08.2009
comment
Для какой программы -prefix-install и -prefix /path есть опции? Они не упоминаются в выводе configure.exe --help - person Piotr Dobrogost; 15.01.2011
comment
Я написал этот ответ 16 месяцев назад. Возможно, конфигурация Qt изменилась. - person mxcl; 18.01.2011

По крайней мере, проблема с отсутствующими включаемыми файлами (например, qscriptengine.h) может быть решена временным добавлением \qt\4.5.2-sources\include\Qt во включаемый путь.

person Community    schedule 09.10.2009

Я переместил теневую сборку из своей домашней папки в папку на C:, и это сработало. Я знаю, это странно, но это то, что произошло. Я подозреваю, что это должна быть ошибка в syncqt.

person asandroq    schedule 04.04.2012