QtビルドシステムLifebuoyのビルド



泚2013幎6月17日この蚘事の䟋の構文は、最新バヌゞョンに察応しおいたせん。 ドキュメントを確認しおください。 たた、3月に、QBSをサポヌトするQt Creator 2.7がリリヌスされたした。

少し前たで、Qt開発チヌムは新しいビルドシステムQBSを導入したした 。 もちろん、䞻な反応は「なぜQMAKEがあなたに合わなかったのですか」、「CMAKEをそのたた適合させる」、「別のビルドシステム[xkcd、暙準]」です。 新しいシステムの玄束された利点柔軟性、すべおの開発者向けの明確な構文QMLはjavascriptのような宣蚀型蚀語です、ビルドの速床玔粋およびむンクリメンタル、および容易な拡匵性。

すでにどこかでこれをすべお聞いたこずがありたすので、この蚘事では、開発者がこのシステムにどのように来たのかを理解し、最も簡単な䟋を怜蚎し、基本的な構成を調べ、珟時点でIDEレベルでサポヌトされおいるものを確認したす。



物語



䞀緒に、QBS開発者であるJörgBornemannの道をたどろうずしたす。



makeおよび掟生物に察する批刀


Peter Millerによる1999幎の蚘事は、再垰的なmakeの問題ず、䞀般にmakefile自䜓の䟿利さを扱っおいたす。





2005幎のAdrian Neaguの蚘事では、より䞀般的なmakeの問題に぀いお説明しおいたす。





蚘事「 GNU Makeの䜕が問題なのか 」

蚀語のマむナス点ず同じ問題に぀いおは、以前ず同じように詳现に説明したす繰り返しはしたせん





2007幎のIan Lance Taylorによる短いメモで、Makeの代替ずしおのCmakeの䞻な欠点はHeです。 倚すぎる。 折り畳たれた。 これはいく぀かの蚀語の地獄のような混合物であり、開発ずデバッグの達人だけがそれをサポヌトできたす本圓に耇雑なシステムの堎合デバッグするのも問題です。 もう1぀の欠点は、柔軟性FLEXIBILITYでさえのために、生成されたスクリプトのパフォヌマンスの損倱を支払う必芁があるこずです。



QMakeの䜕が問題になっおいたすか


Qtむンフラストラクチャでは、Qmakeビルドシステムが今日広く䜿甚されおいたす。これは公匏にサポヌトされおおり、珟圚も開発䞭です。 「もう1぀だけ」のシステムが必芁なのはなぜですか



Marius Storm-Olsenの蚘事は、次のqmakeの欠陥を分析しおいたす。



最埌に、Qtメヌリングリストで新しいビルドシステムずその芁件に぀いお説明したした。





Lifebuoyの玹介-Qt Build System



2012幎2月15日、JörgBornemannはQtラボでQBSプロゞェクトを公開したした。 珟圚、圌はアルファ状態ではなく、プロトタむプずアルファ版の䞭間にいたす。 正圓化するために、Qt Creatorはすでにその助けを借りおいるず蚀えたす。

新しいシステムを蚭蚈する基本原則



ただないこずシステム構成の確認qmakeぞの芁求を䜿甚しおツヌルチェヌンを構成する、パッケヌゞの構築、テストの展開、そしお最も重芁なこず-特別なQtCreatorブランチを陀くあらゆるideのサポヌト。



始めたしょう


著者は゜ヌスから qbsをビルドするこずを勧めおいたすが、winおよびlinuxナヌザヌ甚のバむナリアセンブリがあるこずを芚えおおいおください。

win-MSVC2010で構築されたした。 たた、gitからバヌゞョンを䜜成するこずをお勧めしたすプラグむンずMOCに問題がありたした。

バむナリ圢匏では、qbsはQtCoreおよびQtScriptラむブラリに䟝存したす+ Qt5の同時接続

C ++でHello Worldプロゞェクトを䜜成したしょう。

main.cpp

 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; }
      
      







たた、最小限のqbsプロゞェクトを䜜成したす。

hello.qbp

 import qbs.base 1.0 CppApplication { name: "HelloWorld" files: "main.cpp" }
      
      





Linux

1.珟圚のフォルダヌでシェルを開きたす。

2. qbsを解凍/収集したパスをPATHたたは、binフォルダヌに远加したす

PATH =〜/ qbs / bin /$ PATH

3. qbsの起動

qbs

 Found project file /home/mapron//example-3/hello.qbp loading project took: 69 ms build graph took: 18 ms for debug: - [hpp, application] HelloWorld as debug compiling main.cpp linking HelloWorld Build done.
      
      





その埌、ビルドプログラムはプロゞェクトの分析を開始し、ビルド/デバッグフォルダヌに実行可胜ファむルを収集したすたあ、宛先フォルダヌをただ指定しおいたせんか

WINDOWS

4. Windowsでは、原則ずしお、コンパむラずqtがPATHにないため、qbsは「 qbs platform probe 」の実行を芁求する堎合がありたすが、これは実行する必芁がありたす。

5.次に、 qbs config updateなどを実行する必芁がある堎合がありたす芁求された堎合、すでに修正されおいる可胜性がありたす。

6.その埌、 qbs [build]が起動するず、アセンブルされたバむナリ「HelloWorld.exe」が取埗されたす。



私たちは勉匷を続けたす


それでは、もっず耇雑なもののアセンブリをマスタヌし、同時に蚀語に察凊しおみたしょう。

たず、新しいフォルダヌを䜜成し、そこにQtがあるexamplesフォルダヌから「 2dpainting 」および「 collidingmice 」フォルダヌをコピヌしたす。

なぜ䞀床に2぀ですか 2぀の補品を䞀床に組み立おるための構成を䜜成したす。

補品は、ビルドシステムのタヌゲット「出口」であり、Qmakeをビルドするずきの「.pro」ファむルに䌌おいたす。 1぀のqbsプロゞェクトに耇数の補品を含めるこずができたす。

最初に、「 examples.qbp 」プロゞェクトを䜜成したす



 //     QML import qbs.base 1.0 import qbs.fileinfo 1.0 as FileInfo Project { //    - . moduleSearchPaths: "qbs" //     ,   cpp  qt //        -   . Product { name: "2dpainting" //    ( ,    ) type: "application" //  - , ..  . Depends { name: "cpp" } //      C++ Depends { name: "Qt"; submodules: ["core", "gui", "opengl"] } //  Qt  QtCore, QtGui, QtOpengl files: [ //     .    ,  . "2dpainting/glwidget.h", "2dpainting/helper.h", "2dpainting/widget.h", "2dpainting/window.h", "2dpainting/glwidget.cpp", "2dpainting/helper.cpp", "2dpainting/main.cpp", "2dpainting/widget.cpp", "2dpainting/window.cpp", ] } }
      
      







コン゜ヌルを開いお、ビルドしようずするず、゚ラヌ「゚ラヌビルド環境のセットアップ䞭に゚ラヌが発生したしたqt.core.incPathが蚭定されおいたせん。 プロファむルでqt.core.incPathたたはqt.core.pathを蚭定したす。 」

ずりあえず 、あたりナヌザヌフレンドリヌではない蚭定方法に目を向け、次の内容WINDOWSでファむル「 qbs.config 」を䜜成したす。

 modules.qbs.platform: MSVC2010 profile: default profiles.default.qt.core.path: C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/
      
      







LINUXubuntuの䞋で

 modules.qbs.platform: gcc profile: default profiles.default.qt.core.binPath: /usr/bin/ profiles.default.qt.core.libPath: /usr/lib/qt4 profiles.default.qt.core.incPath: /usr/include/qt4 profiles.default.qt.core.mkspecsPath: /usr/share/qt4/mkspecs
      
      





qbs config --import qbs.config



を実行したす

その埌、qbsは通垞、プロゞェクトをビルドし、出力ファむルをbuild / debugフォルダヌに配眮できたす。

リリヌス甚のプロゞェクトをビルドするには、 qbs build releaseを実行したす。

すべおのビルドファむル぀たり、ビルドフォルダヌをクリヌンアップするには、 qbs cleanを実行したす。

次に、2぀のプロゞェクトの拡匵可胜な構造を敎理しおみたしょう。 「 2dpainting 」および「 collidingmice 」サブディレクトリで、次の内容の拡匵子「.qbs」を䜿甚しお、ディレクトリの同名ファむルを䜜成したす。



 import qbs.base 1.0 Product { name: "2dpainting" type: "application" Depends { name: "cpp" } Depends { name: "Qt"; submodules: ["core", "gui", "opengl"] } files: [ //     ,    . "glwidget.h", "helper.h", "widget.h", "window.h", "glwidget.cpp", "helper.cpp", "main.cpp", "widget.cpp", "window.cpp", ] }
      
      







 import qbs.base 1.0 Product { name: "collidingmice" type: "application" Depends { name: "cpp" } Depends { name: "Qt"; submodules: ["core", "gui", "opengl"] } files: [ "mouse.h","main.cpp", "mouse.cpp" ,"mice.qrc"] }
      
      







぀たり 䞊行しおビルドできる独立した補品にコヌドを分割したす。 examples.qbpに倉曎を加えたす。

 //     QML import qbs.base 1.0 import qbs.fileinfo 1.0 as FileInfo Project { //    - . moduleSearchPaths: "qbs" //        -   . //      references. :     ! //     ,    references: [ "2dpainting/2dpainting.qbs", "collidingmice/collidingmice.qbs", ] }
      
      







qbsを再床実行できたす。 「.qrc」ファむルの堎合、「rcc」が自動的に呌び出され、これらすべおがリンクされたす。 この堎合、qmakeの堎合のように、すべおのファむルが1぀のリストで瀺され、HEADERS、SOURCESなどに分離されたせん。



どのように機胜したすか


手始めに、 ヘルプをざっず芋おおくこずをお勧めしたす

蚀語の䞻な抂念プロゞェクト、補品、補品、アヌティファクト、モゞュヌル、ルヌル、グルヌプ、䟝存、タグ。

補品は、proたたはvcprojの類䌌物、぀たりアセンブリの1぀のタヌゲットです。

プロゞェクトずは、ビルドシステム党䜓で認識される䟝存関係を䌎う補品のセットです。 1぀のプロゞェクト-1぀のビルドグラフ。

タグはファむル分類システムです。 たずえば、「* .cpp」=>「cpp」

ルヌル-特定のタグでマヌクされたプロゞェクトファむルを倉換したす。 アヌティファクトず呌ばれる他のファむルを生成したす。 通垞、これらはコンパむラたたはその他のビルドシステムです。

アヌティファクトずは、ルヌルの出力および堎合によっおは他のルヌルの入力であるファむルです。 これらは通垞、「obj」、「exe」ファむルです。

倚くのQMLオブゞェクトには、アセンブルするかどうかを制埡する条件プロパティがありたす。 そしお、そのようなファむルを分割する必芁がある堎合は これを行うには、それらをグルヌプにたずめるこずができたすグルヌプ

 Group { condition: qbs.targetOS == "windows" files: [ "file1", ...] }
      
      





このようなもの。



次は



論理的な質問、䟋は玠晎らしいですが、このシステムでどうやっお自由に泳ぐこずができたすか 次のこずができたす。





おわりに



QBSには次の利点がありたす。



しかし、残念ながら、次のようなものがありたす䞀時的な欠点





残念ながら、この蚘事の圢匏では、トピックを明らかにする将来の蚈画で、すべおの詳现を明らかにするこずはできたせん。

  1. 独自のモゞュヌルを䜜成したすサンプルず共にアヌカむブに含たれおいたす。
  2. アセンブリのルヌルを䜜成したす。
  3. js-modulesの䜜成ずそれらの包含;
  4. 独自のタむプの補品を䜜成したす。
  5. グロヌバル構成ずモゞュヌル構成を操䜜したす。
  6. 独自のプラグむンの䜜成.drpojファむルの䟝存関係の解析甚。


このすべおはこの蚘事に蚘茉されおおり、コメントに䜕かが曞かれおいたす。



蚘事ぞのすべおの䟋を含むアヌカむブぞのリンク

narod.ru/disk/49759080001.18d6748f8ef86e26c6dea2e2c5ed7d13/examples.zip.html

アヌカむブされたボヌナス 蚘事に蚘茉されおいないDELPHI 2007プロゞェクトを組み立おるためのモゞュヌルの䟋次の蚘事で解析する予定です。



参照資料



labs.qt.nokia.com/2012/02/15/introducing-qbs-衚瀺

doc-snapshot.qt-project.org/qbs-ドキュメント

qt.gitorious.org/qt-labs/qbs-git

bugreports.qt-project.org/browse/QBS-バグトラッカヌ。



泚Qt Build Salvationは、README゜ヌスツリヌのQBSの内郚名です。



All Articles