Какова цель мусора (файлов), который 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, например.
большинство систем управления версиями имеют хорошую поддержку для игнорирования сгенерированных файлов, так как это проблема, пораженная почти каждым проектом программного обеспечения.