Какова цель мусора (файлов), который автоматически генерирует Qt Creator, и как я могу их приручить?
Я довольно новичок в Qt и использую новую бета-версию Nokia Qt SDK, и в свободное время я работаю над созданием небольшого приложения для моего Nokia N900.
К счастью, я смог все правильно настроить, а также запустить свое приложение на устройстве.
Я изучил C++ в школе, поэтому я подумал, что это будет не так сложно.
Я использую Qt Creator в качестве своей IDE, потому что он не работает с Visual Studio.
Я также хочу перенести свое приложение на Symbian, поэтому я несколько раз запускал эмулятор и компилировал для Windows отладку самых злых ошибок. (Отладчик не работает правильно на устройстве.)
Я родом из.NET, поэтому есть некоторые вещи, которые я не понимаю.
Когда я нажимаю кнопку сборки, Qt Creator генерирует кучу файлов в каталог моего проекта:
moc_*.cpp
файлы - я не знаю их цель. Может кто-нибудь сказать мне?*.o
файлы - я предполагаю, что это объектный код*.rss
файлы - я не знаю их предназначение, но они определенно не имеют никакого отношения к RSSMakefile
а такжеMakefile.Debug
- Я понятия не имеюAppName
(без расширения) - исполняемый файл для Maemo, иAppName.sis
- исполняемый файл для Symbian, я полагаю?AppName.loc
- Я понятия не имеюAppName_installer.pkg
а такжеAppName_template.pkg
- Я понятия не имеюqrc_Resources.cpp
- Я думаю, это для моих ресурсов Qt
(где AppName
это название рассматриваемой заявки)
Я заметил, что эти файлы можно безопасно удалить, Qt Creator просто восстанавливает их.
Проблема в том, что они загрязняют мой исходный каталог. Тем более, что я использую контроль версий, и если они могут быть восстановлены, нет смысла загружать их в SVN.
Итак, кто-то может сказать мне, каково точное назначение этих файлов и как я могу попросить Qt Creator поместить их в другой каталог?
РЕДАКТИРОВАТЬ:
Кажется, что я узнал больше из ответов на этот вопрос, чем я думал, что я буду.:)
Большое спасибо всем, кто помог мне. Я дал всем голос, потому что я мог узнать что-то новое из каждого ответа.
На самом деле, то, что Роб рекомендовал, кажется наиболее удобным решением, но я отметил, что ответ Котти принят, потому что он предоставил мне лучшее объяснение того, как работает механизм сборки Qt.
Решение:
Кажется, что ни Maemo, ни набор инструментов Symbian пока не поддерживают теневые сборки, поэтому я использую их в своем файле проекта для решения ситуации:
DESTDIR = ./NoSVN
OBJECTS_DIR = ./NoSVN
MOC_DIR = ./NoSVN
RCC_DIR = ./NoSVN
UI_HEADERS_DIR = ./NoSVN
4 ответа
Не полностью ответ на ваш вопрос, но только часть его:) Кроме того, это googlable.
Угадайте, что если вы разрабатываете на C++, вы должны знать, что делает Makefile
стоять за. Также я думаю, что .loc
Файл - это, как правило, файл с локализованными строками / контентом.
http://thelins.se/learnqt/wp-content/uploads/qt-buildsystem.png
Сравнивая систему сборки C++ с системой сборки Qt, вы можете видеть, что система сборки C++ (серые прямоугольники) остается неизменной. Мы все еще строим код C++ здесь. Тем не менее, мы добавляем больше источников и заголовков. Здесь задействованы три генератора кода:
Компилятор мета-объекта (moc на иллюстрации) - компилятор мета-объекта берет все классы, начиная с макроса Q_OBJECT, и генерирует исходный файл C++ moc _ *. Cpp. Этот файл содержит информацию о перемещаемом классе, такую как имя класса, дерево наследования и т. Д., А также реализацию сигналов. Это означает, что когда вы излучаете сигнал, вы фактически вызываете функцию, сгенерированную moc.
Компилятор пользовательского интерфейса (uic на иллюстрации) - Компилятор пользовательского интерфейса берет дизайны из Designer и создает заголовочные файлы. Эти заголовочные файлы затем включаются в исходные файлы, как обычно, что позволяет вызвать setupUi для создания дизайна пользовательского интерфейса.
Компилятор ресурсов Qt (на иллюстрации rcc) - Компилятор ресурсов - это то, о чем мы еще не говорили. Это позволяет встраивать изображения, текстовые файлы и т. Д. В ваш исполняемый файл, но при этом получать к ним доступ как к файлам. Мы рассмотрим это позже, я просто хочу включить это в эту картину, где он принадлежит.
Я надеюсь, что эта иллюстрация проясняет, что в действительности делает Qt, чтобы добавлять новые красивые ключевые слова в C++. Если вам интересно - не стесняйтесь читать некоторые из сгенерированных файлов. Только не меняйте их - они обновляются каждый раз, когда вы создаете свое приложение.
Если вы используете QtCreator, файлы moc генерируются в подкаталогах debug и release каталога вашего проекта. Файлы uic хранятся в корне каталога проекта. Файлы rcc обычно скучны, но я уверен, что вы можете найти их где-нибудь в иерархии каталогов вашего проекта.
Изменить: Вам не нужно включать эти файлы в свой SVN. Это почти то же дерьмо, что и совершение .ncb
, .pdb
и другие временные файлы. Каждый раз, когда вы что-то изменяете в своем приложении Qt, эти временные файлы восстанавливаются как обновление ваших изменений, поэтому нет смысла фиксировать их в SVN.
Вы можете указать qmake (и, следовательно, QtCreator) поместить сгенерированные файлы в другое место, добавив следующее в ваш файл.pro для проекта.
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
Это поместит все файлы пользовательского интерфейса в каталог.ui, файлы moc в каталог.moc и все файлы.o в каталог.obj. (Конечно, вы можете изменить их, как вам нравится)
Соответствующая справка для qmake находится по адресу: http://doc.qt.io/archives/4.6/qmake-variable-reference.html
Если вы используете теневые сборки (включены по умолчанию в бета-версии Qt Creator 2.0), то все эти временные файлы создаются в отдельной папке. Например:
\MyProjects\ProjectFoo
\MyProjects\ProjectFoo-build
Очень полезно ИМХО.
Не пытайтесь получить файлы, хранящиеся в другом каталоге; вместо этого расскажите Subversion, чтобы они игнорировались, как описано, например, на http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html.
Большинство систем контроля версий имеют хорошую поддержку игнорирования сгенерированных файлов, поскольку это проблема, с которой сталкивается практически каждый программный проект.