Какова цель мусора (файлов), который Qt Creator автоматически генерирует, и как я могу их приручить?

Я довольно новичок в Qt, и я использую новую бета-версию Nokia Qt SDK, и я работаю над разработкой небольшого приложения для моего Nokia N900 в свободное время.
К счастью, я смог настроить все правильно, а также запустить приложение на устройстве.

я выучил C++ в школе, поэтому я думал, что это будет не так сложно.
Я использую Qt Creator в качестве своей IDE, потому что он не работает с Visual Studio.

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

Я пришел из .NET-фона, поэтому есть некоторые вещи, которые я не понимаю.

когда я нажимаю кнопку сборки, Qt Creator генерирует кучу файлов в мой каталог проекта:

  • moc_*.cpp файлы - я не знаю их цели. Кто-нибудь может мне сказать?
  • *.o файлы - я предполагаю, что эти являются объектным кодом
  • *.rss файлы - я не знаю их цели, но они определенно не имеют ничего общего с RSS
  • Makefile и Makefile.Debug - понятия не имею
  • AppName (без расширения) - исполняемый файл для Maemo, и AppName.sis - исполняемый файл для Symbian, я полагаю?
  • AppName.loc - понятия не имею
  • AppName_installer.pkg и AppName_template.pkg - понятия не имею
  • qrc_Resources.cpp - Я думаю, это для моего Qt ресурсы

(где AppName это название рассматриваемого приложения)

я заметил,что эти файлы можно безопасно удалить, Qt Creator просто восстанавливает их.
Проблема в том, что они загрязняют мой исходный каталог. Тем более, что я использую контроль версий, и если они могут быть восстановлены, нет смысла загружать их в SVN.

Итак, может ли кто-нибудь сказать мне, какова точная цель этих файлов, и как я могу спросить Qt Создатель, чтобы поместить их в другой каталог?

EDIT:

Большое спасибо всем, кто помог мне. Я дал каждому upvote, потому что я мог узнать что-то новое из каждого ответа.

на самом деле, то, что рекомендовал Роб, кажется наиболее удобным решением, но я отметил, что ответ Котти принят, потому что он предоставил мне лучшее объяснение того, как работает механизм сборки Qt.

решение:

похоже, что ни Maemo, ни Symbian toolchain пока не поддерживают shadow builds, поэтому я использую их в своем файле проекта для решения ситуации:

DESTDIR = ./NoSVN
OBJECTS_DIR = ./NoSVN
MOC_DIR = ./NoSVN
RCC_DIR = ./NoSVN
UI_HEADERS_DIR = ./NoSVN

4 ответов


не полностью ответ на ваш вопрос, но только часть его :) Кроме того, это googlable.

думаю, что если вы разрабатываете на C++, вы должны знать, что значит Makefile подставка для. Также я думаю, что .loc файл обычно представляет собой файл с локализованными строками / содержимым.

alt текст http://thelins.se/learnqt/wp-content/uploads/qt-buildsystem.png

сравнивая систему сборки C++ с системой сборки Qt, вы можете видеть, что система сборки C++, ( серые коробки), остаются неизмененными. Мы все еще создаем код на C++. Однако мы добавляем больше источников и заголовков. Здесь задействованы три генератора кода:

компилятор метаобъектов (moc на иллюстрации) – компилятор мета-объектов принимает все классы, начиная с макроса Q_OBJECT, и генерирует moc_*.cpp файл исходного кода C++. Этот файл содержит информацию о класс МОЦ объед такую как имя класса, дерева наследования и т. д., а также осуществление сигнал. Это означает, что когда вы излучаете сигнал, вы фактически вызываете функцию, сгенерированную moc.

компилятор пользовательского интерфейса (uic на иллюстрации) – компилятор пользовательского интерфейса берет проекты из конструктора и создает файлы заголовков. Эти заголовочные файлы затем включаются в исходные файлы, как обычно, что позволяет вызвать setupUi для создания экземпляра пользовательского интерфейса.

компилятор ресурсов Qt (rcc в иллюстрация) – компилятор ресурсов-это то, о чем мы еще не говорили. Это позволяет вставлять изображения, текстовые файлы и т. д. В исполняемый файл, но по-прежнему обращаться к ним как к файлам. Мы посмотрим на это позже, я просто хочу включить его в эту картину, где он принадлежит.

Я надеюсь, что эта иллюстрация прояснит, что Qt действительно делает, чтобы добавить новые хорошие ключевые слова в C++. Если вам интересно-не стесняйтесь читать некоторые из сгенерированных файлов. Просто не изменяйте их – они регенерируется каждый раз, когда вы создаете приложение.

если вы используете QtCreator, файлы moc генерируются в подкаталогах отладки и выпуска каталога проекта. Файлы uic хранятся в корневом каталоге проекта. Файлы rcc обычно скучны, но я уверен, что вы можете найти их в своем каталоге проекта hierarcy где-нибудь.


Edit: вам не нужно включать эти файлы в свой SVN. Это такая же хрень как совершение .ncb, .pdb и другие временные файлы. Каждый раз, когда вы что-то меняете в своем приложении Qt, эти временные файлы регенерируются как обновление ваших изменений, поэтому нет смысла фиксировать их в SVN.


вы можете сказать qmake (и, следовательно, QtCreator), чтобы поместить сгенерированные файлы в другое место, добавив следующее к вашему .pro файл для проекта

UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj

Это поместило бы все файлы ui в .ui каталог, moc файлы в.директор МОК и все такое .o файлы в.в каталоге obj. (Конечно, вы можете изменить их, как вам нравится)

соответствующая справка для qmake находится на: http://doc.qt.io/archives/4.6/qmake-variable-reference.html#moc-dir


Если вы используете теневые сборки (включено по умолчанию в Qt Creator 2.0 beta), то все эти временные файлы создаются в отдельной папке. Например:

\MyProjects\ProjectFoo
\MyProjects\ProjectFoo-build

очень полезный ИМХО.


Не пытайтесь получить файлы, хранящиеся в другом каталоге; скорее, скажите subversion игнорировать их, как объяснено в http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html, например.

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