2010-05-24 44 views
5

我對Qt相當陌生,而且我正在使用新的Nokia Qt SDK測試版,並且正在努力在我的空閒時間爲我的諾基亞N900開發一個小型應用程序。
幸運的是,我能夠正確設置所有內容,並且還可以在設備上運行我的應用。Qt Creator自動生成的垃圾(文件)的用途是什麼?我怎樣才能馴服它們?

我在學校學過C++,所以我覺得它不會那麼困難。
我使用Qt Creator作爲我的IDE,因爲它不適用於Visual Studio。

我也希望將我的應用程序移植到Symbian上,所以我已經運行了仿真器幾次,並且還編譯了Windows以調試最惡劣的錯誤。 (調試器在設備上無法正常工作。)

我來自.NET背景,所以有些東西我不明白。

當我打的生成按鈕,Qt Creator中生成一堆文件到我的項目目錄:

  • moc_*.cpp文件 - 我不知道他們的目的。有人能告訴我嗎?
  • *.o文件 - 我認爲這些都是目標代碼
  • *.rss文件 - 我不知道他們的目的,但他們絕對沒有任何與RSS
  • MakefileMakefile.Debug - 我不知道
  • AppName(沒有擴展名) - Maemo的可執行文件和AppName.sis - Symbian的可執行文件,我猜?
  • AppName.loc - 我不知道
  • AppName_installer.pkgAppName_template.pkg - 我不知道
  • qrc_Resources.cpp - 我想這是對我的Qt資源

(其中AppName是有問題的應用程序的名稱)

我注意到這些文件可以安全地刪除,Qt Creator只是重新生成它們。
問題是他們污染我的源代碼目錄。特別是因爲我使用版本控制,並且如果它們可以重新生成,那麼將它們上傳到SVN是毫無意義的。

那麼,有人可以告訴我這些文件的確切目的是什麼嗎?我該如何讓Qt Creator將它們放到另一個目錄中?

編輯:

看來,我從這個問題的答案學到的比我想我會的。 :)
非常感謝所有幫助我的人。我給每個人都贊成,因爲我可以從每個答案中學到新的東西。

事實上,Rob推薦的似乎是最方便的解決方案,但我標記了Kotti的答案,因爲他向我提供了關於Qt構建機制如何工作的最佳解釋。

解決辦法:

看來,無論是Maemo的,也不是Symbian的工具鏈支持影子建立自,所以我用這些在我的項目文件,以解決情況:

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

它可能需要一些研究,但你應該能夠找出一種方法來使這些文件到別處。 (我們正在構建Qt應用程序,但不使用QMake,所以我不能告訴你具體情況;我只知道這些工具會將文件放在任何你想要的地方。) – 2010-05-25 00:00:20

+0

@ dash-tom-bang - 我很好奇,如果不是QMake,你使用什麼工具編譯和構建? – Venemo 2010-05-26 14:12:46

+0

從Jam派生的內部工具。 – 2010-05-26 15:43:35

回答

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,則在項目目錄的調試和版本子目錄中生成moc文件。 uic文件存儲在項目目錄的根目錄中。 rcc文件通常很無聊,但我確定你可以在你的項目目錄層級找到它們。


編輯:您不必將這些文件包含到您的SVN中。這與提交.ncb,.pdb和其他臨時文件相同。每次在Qt應用程序中更改某些內容時,都會重新生成這些臨時文件作爲更改的更新,因此將它們提交給SVN是沒有意義的。

+0

@Kotti - 非常感謝!但是,它們實際上都放置在我的項目的根目錄中。如果我能把它們放到'debug'或'bin'目錄中,我會很高興。 – Venemo 2010-05-25 00:57:53

+0

正如我記得我是如何做Qt的東西(我使用Visual Studio + Qt),有一個設置窗口,您可以在其中指定放置這些生成的文件的位置。在我的情況下,它被設置爲'GeneratedFiles',我甚至沒有考慮它。我很確定在Qt​​ Creator中應該有相同的開關。另外,你爲什麼說Qt不適用於VS? – 2010-05-25 01:10:02

+0

@Kotti - 我說因爲它不起作用。它不允許我創建一個新項目。可能它被一些VS擴展搞砸了。但這並不重要,因爲我不認爲可以通過它爲移動設備進行刪除。 (至少,我找不到任何有關它的資源。) – Venemo 2010-05-26 14:02:43

5

你可以告訴qmake的(因此QtCreator)在其他地方把生成的文件中加入以下到您的.pro文件的項目

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

這將使所有UI文件中的.ui目錄, .moc導向器中的moc文件和.obj目錄中的所有.o文件。 (當然你也可以,只要你喜歡更改這些)

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 2010-05-25 13:36:52

+0

我發現默認情況下在Nokia Qt SDK中的Qt Creator v.1.3.83與2.0 beta 1相同。但是,這些文件是在源文件夾中創建的。你能告訴我在哪裏啓用你正在談論的設置嗎? – Venemo 2010-05-26 14:29:10

+0

選擇項目視圖,然後選擇生成頁面。陰影構建設置應該在那裏 - 它可能是啓用的,但文件夾位置與項目相同。 – Rob 2010-05-26 18:59:55

相關問題