2009-09-02 3 views
48

Я только начал использовать Qt и заметил, что он использует свой собственный инструмент для создания, qmake.Почему Qt использует собственный инструмент make, qmake?

  • Почему Qt использует собственный инструмент?
  • Есть ли что-то особенное, что мешает ему использовать стандартный инструмент?
  • Выполняет ли qmake код GCC C++?
+20

Вы неправильно поняли, 'qmake' скорее заменяет' configure', а не 'make' –

+1

. Если вы знакомы с Imakefiles, ваш файл qt .pro является заменой для этого. Вместо того, чтобы сделать Makefile из вашего Imakefile, qmake делает Makefile из вашего .pro-файла. (Он также может генерировать файл .pro для вас, хотя иногда вам нужно будет добавить его значения по умолчанию.) – Bill

ответ

51

Qt использует qmake для прозрачной поддержки различных аддонов Qt, включая «moc, метаобъектный компилятор» (который предоставляет сигналы & слотов), «uic, компилятор ui» (w hich создает файлы заголовков из файлов .ui designer), «rcc, компилятор ресурсов» (который компилирует ресурсы).

Вам ничто не мешает вам использовать любую систему сборки, которую вы хотите. однако, это намного больше работы. Например, вам нужно запустить «moc» над каждым заголовочным файлом, который содержит класс с сигналами или слотами. В общем, это не рекомендуется, особенно для тех, кто только начинает использовать Qt.

QMake не вызывает g ++/gcc напрямую. Вместо этого qmake создает собственные файлы make на вашей текущей платформе. Под linux он создает стандартные файлы GNU make, под окнами он может генерировать визуальные студийные файлы, в Mac OS X он может генерировать файлы проектов XCode. Затем вы вызываете свою собственную систему сборки (либо GNU make, либо MS NMake, либо xcodebuild или что-то еще), что вызовет ваш собственный компилятор (g ++/gcc или что-то еще).

+0

RE «QMake не вызывает g ++/gcc напрямую»: QT не использует стандартный компилятор C++, например gcc? Какой компилятор использует? –

+0

QT - кросс-платформа; он может быть скомпилирован с помощью множества разных компиляторов. –

+8

QMake НЕ ЗНАЕТ gcc напрямую. Он создает файлы make-файлов, специфичные для платформы, которые вы * затем вызываете. Эти файлы, в свою очередь, вызывают любой компилятор, который, как вы, кажется, используете. – Thomi

3

Для того

а), потому что это делает много за кулисами вы

б) да, увидеть)

с) да, это делает вызов г ++ (но может поддерживать другие компиляторы, если они у вас есть)

5

qmake Предназначен для кросс-платформенной и гибкой. Он может совместим с Microsoft Visual Studio и Xcode.

Вы можете найти все это в qmake Manual.

qmake создает файл Makefile на основе информации в файле проекта. Файлы проекта создаются разработчиком , и, как правило, просты, но более сложные файлы проектов могут быть созданы для сложных проектов. qmake содержит дополнительные функции для Поддержка разработки с Qt, автоматически включает правила сборки для moc и uic. qmake может также создавать проекты для студии Microsoft Visual , не требуя разработчика , чтобы изменить файл проекта.

+5

=> Так что это не совсем инструмент для создания, а инструмент для предварительной подготовки;) –

4

Для поддержки своей системы сигналов/слотов Qt полагается на специальный препроцессор и компилятор, который генерирует промежуточные объекты, которые выполняют большую часть обработки. Они ссылаются на это как на метаобъектный компилятор или MOC.

Подробнее см. http://doc.trolltech.com/4.5/moc.html.

MOC (наряду с несколькими другими промежуточными инструментами) работает совместно с qmake; который создает make-файлы в вашем родном формате (VC++, g ++ и т. д.), которые создают промежуточные файлы, созданные MOC, а также все ваши исходные файлы в окончательный исполняемый файл.

7

В моем мнении qmake классно для простых проектов (вы можете просто qmake -project; qmake; make), но ужасно и недостаточно документировано для довольно крупных проектов. Особенно функциональность настройки qmake - шутка.

Лучшие системы сборки, которые я знаю, это CMake и Waf (на основе Python). В моих собственных Qt-проектах я использую CMake для выполнения этой работы. Как и KDE-парни :)

Смежные вопросы