2010-05-24 5 views
5

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

Я изучил 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 Creator разместить их в другом каталоге?

EDIT:

Кажется, что я узнал больше из ответов на этот вопрос, чем я думал, что я. :)
Большое спасибо всем, кто помог мне. Я дал каждому преимущество, потому что я мог узнать что-то новое из каждого ответа.

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

Решение:

Кажется, что ни Maemo, ни набор инструментов Symbian поддерживают тень строит как еще, так что я использую это в моем файле проект, чтобы решить ситуацию:

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

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

+0

@ dash-tom-bang - Мне любопытно , какой инструмент вы используете для компиляции и сборки, если не QMake? – Venemo

+0

Внутренний инструмент, полученный из Jam. –

ответ

18

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

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

alt text http://thelins.se/learnqt/wp-content/uploads/qt-buildsystem.png

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

мета-объектный компилятор (MOC на рисунке) - мета-объектный компилятор принимает все классы, начиная с Q_OBJECT макро и генерирует MOC _ * каст C++ исходный файл.. Этот файл содержит информацию о классе, который был moc'ed, такой как имя класса, дерево наследования и т. Д., А также реализация сигналов. Это означает, что когда вы излучаете сигнал, вы фактически вызываете функцию, сгенерированную moc.

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

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

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

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


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

+0

@ Kotti - Спасибо вам большое! Тем не менее, они действительно все помещены в корневой каталог моего проекта. Я был бы рад, если бы смог заставить их поместить их в каталог 'debug' или' bin'. – Venemo

+0

Как я помню, как я делал Qt (я использовал Visual Studio + Qt), появилось окно настроек, в котором вы могли указать, где разместить эти сгенерированные файлы. В моем случае он был настроен на «GeneratedFiles», и я даже не думал об этом. Я уверен, что в Qt Creator должен быть такой же переключатель. Кроме того, почему вы сказали, что Qt не работает с VS? –

+0

@ Kotti - Я говорю, потому что он не работает. Это не позволяет мне создать новый проект. Возможно, это перепутано некоторым расширением VS. Но это не имеет значения, потому что я не думаю, что с ним можно делелоп для мобильных устройств. (По крайней мере, я не мог найти никаких ресурсов об этом.) – Venemo

1

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

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

5

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

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

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

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

2

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

\MyProjects\ProjectFoo 
\MyProjects\ProjectFoo-build 

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

+0

Спасибо, я проверю это. Однако будет странно, что у меня будет 3 разных версии Qt Creator. : P – Venemo

+0

Я обнаружил, что Qt Creator v.1.3.83, который по умолчанию в Nokia Qt SDK, совпадает с 2.0 beta 1. Тем не менее эти файлы создаются в исходной папке. Не могли бы вы рассказать мне, где включить настройку, о которой вы говорите? – Venemo

+0

Выберите представление «Проекты», а затем страницу «Создание». Настройки теневой сборки должны быть там - возможно, он включен, но расположение папки совпадает с проектом. – Rob