Qt Creator自动生成的垃圾(文件)的目的是什么,我该如何驯服它们?

Ven*_*emo 6 c++ qt qt4 qt-creator qt-maemo

我是Qt的新手,我正在使用新的诺基亚Qt SDK测试版,我正在努力在我的空闲时间为我的诺基亚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 Creator将它们放入另一个目录?

编辑:

似乎我从这个问题的答案中学到了比我想象的更多.:)
非常感谢帮助我的每个人.我给了每个人一个upvote,因为我可以从每个答案中学到新东西.

实际上,Rob推荐的似乎是最方便的解决方案,但我接受了Kotti的回答,因为他为Qt的构建机制如何运作提供了最好的解释.

解决方案:

似乎Maemo和Symbian工具链都没有支持阴影构建,所以我在我的项目文件中使用这些来解决这种情况:

DESTDIR = ./NoSVN
OBJECTS_DIR = ./NoSVN
MOC_DIR = ./NoSVN
RCC_DIR = ./NoSVN
UI_HEADERS_DIR = ./NoSVN
Run Code Online (Sandbox Code Playgroud)

Cos*_*ert 18

不完全回答你的问题,但只是其中的一部分:)而且,它是可以转让的.

猜猜如果你用C++开发,你应该知道它Makefile代表什么.另外我认为该.loc文件通常是具有本地化字符串/内容的文件.

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

将C++构建系统与Qt构建系统进行比较,您可以看到C++构建系统(灰色框)未经修改.我们仍然在这里构建C++代码.但是,我们添加了更多的源和标头.这里涉及三个代码生成器:

元对象编译器(图中的moc) - 元对象编译器接受以Q_OBJECT宏开头的所有类,并生成moc _*.cpp C++源文件.此文件包含有关正在进行moc的类的信息,例如类名,继承树等,还包含信号的实现.这意味着当您发出信号时,实际上会调用由moc生成的函数.

用户界面编译器(图中的uic) - 用户界面编译器从Designer获取设计并创建头文件.然后像往常一样将这些头文件包含在源文件中,从而可以调用setupUi来实现用户界面设计.

Qt资源编译器(图中的rcc) - 资源编译器是我们尚未讨论的内容.它可以将图像,文本文件等嵌入到您的可执行文件中,但仍然可以将它们作为文件进行访问.我们稍后会看到这个,我只想将它包含在它所属的图片中.

我希望这个例子说明了Qt真正为C++添加新的好关键字的作用.如果你很好奇 - 随意阅读一些生成的文件.只是不要改变它们 - 每次构建应用程序时都会重新生成它们.

如果您使用的是QtCreator,则会在项目目录的debug和release子目录中生成moc文件.uic文件存储在项目目录的根目录中.rcc文件通常很无聊,但我确信你可以在你的项目目录中找到它们.


编辑:您不必将这些文件包含在SVN中.这是非常相同的废话作为commiting .ncb,.pdb以及其他临时文件.每次在Qt应用程序中更改某些内容时,这些临时文件都会重新生成,作为更改的更新,因此将它们提交给SVN是没有意义的.


Dav*_*ben 5

您可以通过将以下内容添加到项目的.pro文件中来告诉qmake(以及QtCreator)将生成的文件放到别处

UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
Run Code Online (Sandbox Code Playgroud)

这会将所有ui文件放在.ui目录中,moc文件放在.moc目录中,所有.o文件放在.obj目录中.(当然你可以随意改变这些)

qmake的相关帮助位于:http: //doc.qt.io/archives/4.6/qmake-variable-reference.html#moc-dir