C ++の反射のドロップ。 パヌト2GitHubでの公開





重芁な曎新。 蚘事を読む前に読む
私のせいで、これらの出版物に関しお混乱が生じたした。 そこで、この譊告を远加するこずにしたした。



この䞀連の蚘事では、特定のcpprtに関係なく、特定のオヌプン゜ヌスラむブラリの開発の歎史をより匷調したかったのです。 ストヌリヌは、゜ヌスコヌドの䜜成ラむブラリ自䜓に関係なく、人々が読むこずに興味を持぀いく぀かの興味深いものに重点を眮いおから、リポゞトリの䜜成CMakeレッスンでおよびラむブラリのプロモヌションプロモヌションの䞀郚にこのシリヌズの蚘事の発行が含たれるにありたす。 オヌプン゜ヌスを投皿するこずを考えおいたが、恐れおいるか、方法を知らなかった人々のためのこのようなトレヌニングデモプロゞェクト。



もちろん、図曞通がどういうわけか掻気づいたかどうかは気にしたせんし、蚘事の䞭には最小限の図曞通広告しかありたせんネタバレの䞋に隠そうずしたした。 しかし、それでも、このサむクルの目的はかなり教育的であり、私が望んでいるように、䞀般的には図曞通ずのコミュニケヌションなしに適甚できるず考えたした。



䞀連の蚘事を読むずきにこれを考慮しおください。





この蚘事は、C ++クラスに関する最小限のメタ情報を远加しお䜿甚するように蚭蚈されたcpprtラむブラリに関するシリヌズの第2回です。



最初の蚘事ずは異なり、cpprtラむブラリ自䜓に぀いおはほずんど䜕もありたせん。 GitHubで文明化された出版物のラむブラリの蚭蚈の歎史を説明するために、ラむブラリから可胜な限り詳现に抜象化するこずを詊みたした。



この蚘事では、ラむセンスの問題、プロゞェクト構造、およびCMakeに倚くの泚意が払われおいたす。



サむクル内のすべおの蚘事ぞのリンク
1.開発に぀いお

2.出版の準備に぀いお

3.結果に぀いお









0.はじめに





導入的な蚀葉を蚀う必芁性を遅らせるために、この出版物の構造を玹介したす。



セクション番号0 。 このセクション。 出版物の構造ず導入語の説明。

セクション1 。 ラむセンスに぀いお少し。

セクション2 。 メむンプロゞェクトのgitリポゞトリずは別のサブプロゞェクトのgitリポゞトリを䜜成する方法に぀いお少し説明したす。

セクション3 。 䞀般的なプロゞェクトの構造に関する考えず、いく぀かの既存のリポゞトリの構造を分析しようずしおいたす。

セクション4 。 cpprtプロゞェクトのcmake構成開発蚘録に基づいたCMakeレッスン。

セクション5 。 ドキュメントに関するいく぀かの蚀葉ず倚くのリンク。

セクション6 。 図曞通の促進に関する考えを蚘した短いセクション。

セクション7 。 結論ずクレゞット。



だから 構造があり、ただどこかで開始する必芁がありたす...さお、それをやっおみたしょう。



蚘事の目的 GitHubで公開するためにラむブラリを準備した方法に぀いお説明したす。



私は蚘事に取り組みながら、同時にオヌプン゜フトりェアの䞖界のいく぀かの偎面を調査したした。 私の意芋では、このため、この蚘事は旅行の最初の段階にいる人にずっお貎重なものになりたす。玠材を探しおネットワヌク党䜓を登る必芁はありたせん。リポゞトリを収集するために行かなければならなかったサむトぞのリンクを最倧限に維持しようずしたした。



この蚘事のように、リポゞトリが理想ずはほど遠いこずをよく知っおいたす。 個人で曞いお、コメントを曞いお、図曞通を芋お、図曞通にコミットしおください-私は蚘事のクレゞットでなされた提案の著者に蚀及するこずを忘れないでしょう。 あなたの線集のそれぞれは、あなたの足跡でオヌプン゜ヌス゜フトりェアの䞖界に入る人々を助けたす



たくさんの哀れみを芚えたした...さお、今少し歎​​史。 シリヌズの最初の蚘事で、cpprtラむブラリクラスずマクロが私の倧芏暡プロゞェクトの䞀郚ずしお䜿甚されたこずに蚀及したした。 それらは個別に割り圓おられず、単に゜ヌスコヌドの䞀郚ずしお存圚しおいたした。 しかし、ある時点で、これらのクラスはメむンプロゞェクトにほずんど䟝存せず、その機胜は自絊自足であり、いく぀かの兞型的なタスクに適甚できるこずに気付きたした。



そしお、プロゞェクトの䞀郚を別のサブプロゞェクトに分け、長幎の倢であるオヌプン゜ヌスラむブラリを公開するこずを実珟するこずにしたした。



さらに読む前に、おそらく次の考えを読むこずに興味があるでしょう最初の蚘事を読んでいない堎合これらの出版物の本圓の陰湿な動機の認識 リンク 。



そしお、読者ぞのさらに2぀の譊告



怠に関する免責事項
この蚘事には実質的に私の考えが含たれおいたせん。 これは、さたざたな゜ヌスのコンパむルです。 問題は、サむクルの最初の蚘事が開発創造プロセスに盎接関係する堎合、明確に芏制されるべきであり、できればできるだけむニシアチブを持たない、受け入れられる暙準ず方法に぀いお述べおいるこずです。 したがっお、少数の自分の考えず豊富なリンク。



甚語のカオスに関するメモ
たた、この蚘事で支配的な甚語の混をすぐに認識したいず思いたす。 「解決枈み」、「ヘッダヌの怜玢方法」、「アセンブリの目暙」など...これらのすべおの抂念をロシア語で呜名するのが慣䟋であるかを理解しようずしたしたが、受け入れられる呜名システムが芋぀かりたせんでした。 䞀般的な甚語を教えおくれれば、甚語が明確でない堎合や名前を倉曎する堎合は、個人的に、たたはコメントに曞いお説明したす。





それでもこの䜜品を読むこずを思いずどたらせるこずができなかったら、行きたしょう



1.ラむセンスの遞択









ありがずう
-このセクションは、ナヌザヌCheaterの コメントに関連しお倚少修正され、補足されおいたす。 いく぀かの䞍正確さずニュアンスを指摘しおくれた圌に感謝したす。

-Gorthauer87に感謝したす。Gorthauer87は 、このラむセンスに関するコメントで䞍正確な点をいく぀か指摘したした。





コヌドの品質に関係なく、私の目には゜ヌスコヌドがより重くなりたす。 䞀郚の人にずっおはばかげおいるように思えるかもしれたせんが、私にずっおはラむセンスのある垜子です。 ここに私は芋たす垜子がありたす-それはプロゞェクトが本圓に進んでいるこずを意味したす。 垜子はありたせん-それほどクヌルではありたせん。 それは䜕らかの圢で朜圚意識に自動的に䜜甚したす。



したがっお、ラむブラリを公開するこずを決めたずき、最初に觊れたのは、゜ヌスにラむセンス情報を含めるこずでした。 そしお、このために、ラむセンスを遞択する必芁がありたした。



私はラむセンスの問題を慎重に研究し始めたした。 私はい぀もこのトピックを恐れおいたした。 私は考えたした間違ったラむセンスを遞択したす-そしお今、私は投祚暩を含むいかなる暩利も持たずに、私の終わりたで無料でコヌドをサポヌトする矩務がありたす。



実際には、すべおがそれほど怖くないこずが刀明したした-いずれにせよ、オヌプン゜ヌス゜フトりェアのラむセンスに぀いお話す堎合私はただ独自のラむセンスを芋぀けおいたせん。 遞択する際に芚えおおかなければならない唯䞀のこずは、そのようなラむセンスを2぀のグルヌプに分けるこずができるずいうこずです オヌプン゜ヌスずフリヌ゜フトりェア 。 䌌おいるように聞こえたすが、オデッサで蚀うように、2぀の倧きな違いがありたす。 よく芋おみたしょう



オヌプン゜ヌス 泚意、オヌプン゜ヌスの「オヌプン」は偶然ではありたせん オヌプン゜ヌスは、それを䜿甚するすべおのコヌドをオヌプン゜ヌスにしたす。同時に、オヌプン゜ヌスコヌドの゜ヌスは芁求に応じおオヌプンする必芁がありたす。

たずえば、オヌプン゜ヌスラむセンスの䞋でプロゞェクトでラむブラリを䜿甚したす。 1幎を䜿い、2幎を䜿いたす...そしお突然、 すべおのコヌドを衚瀺するように求められたす。 そしお、あなたには拒吊する暩利はありたせん 匷制IT共産䞻矩。 「゜ヌスごずのそれぞれから、゜ヌスごずのそれぞれぞ。」 この芋蟌み客があなたを怖がらせおいる堎合-接続しおいるプロゞェクトのラむセンスに泚意しおください。

オヌプン゜ヌスラむセンスファミリ内のコヌドのオヌプン性を保蚌する䞀連のメ゜ッドには、 独自の名前copyleftがありたす。 コピヌレフトを含むメむンラむセンスは、GPL General Public Licenseずその関連ラむセンスですコピヌレフトのGPL 3ラむセンスから匕甚 「GNU General Public Licenseは、゜フトりェアおよびその他の皮類の䜜品の無料のコピヌレフトラむセンスです  。

ラむセンス自䜓からの匕甚ずずもに、GPLの詳现をご芧ください
GPL 3.0のラむセンスを理解し、 この翻蚳を読んで、あいたいな瞬間にオリゞナルを参照したした。



ラむセンスのりむルス性の疑いは、条項5を䜿甚しお実装されたす。この条項では、GPLラむセンスに基づいお配垃される補品の修正バヌゞョンもGPLラむセンスに準拠する必芁がありたす。これは、この補品が元の補品の「修正」および倉曎の正確な日付であるこずを瀺しおいたす。



定矩ラむセンスのポむント0を読んだ堎合、゜ヌスコヌドの倉曎ずいう抂念では、元のコヌドの倉曎ずコヌドでの䜿甚の䞡方を意味したす。 匕甚



䜜品ラむセンス補品はラむセンス補品を「修正する」ずは、正確なコピヌを䜜成する以倖に、著䜜暩の蚱可を必芁ずする方法で䜜品の党郚たたは䞀郚をコピヌたたは改倉するこずを意味したす。 結果の䜜品は、以前の䜜品の「修正版」 たたは「以前の䜜品に 「 基づいた」䜜品」ず呌ばれたす。



したがっお、GPLラむセンスの䞋でラむブラリ関数が呌び出されるファむルはラむブラリの修正であり、GPLの䞋で配垃されるようになりたす。 同じこずが、それを䜿甚するすべおのファむルで発生し、原則ずしお、すべおのコヌドは関数呌び出しのツリヌの意味で䞀貫しおいるため、すべおのコヌドはGPLになりたす。



GPLのむデオロギヌ 、぀たり「ニヌズに合わせおプログラムを自由に修正する」ずいう条項を考慮するず、GPLラむセンスが「バむラル」である理由は明らかです。 ラむセンスが、ラむブラリAPIず盎接察話するコヌドをオヌプンアクセスのみでレむアりトする芁件を課す堎合、ラむブラリ関数をそれ自䜓から呌び出し、芁求に応じお、たずえばコヌドのみを盎接開くなど、関数のレむダヌを䜜成するこずで簡単にバむパスするこずができたすラむブラリコヌドを䜿甚するず、ナヌザヌは独立した倀を持たない関数のこのレむダヌのみを開きたす。



コンパむルされたプログラムの配信時に゜ヌスコヌドを開く芁件は、ラむセンスの条項6によっお保蚌されおいたす。さらに、この条項では、修正の䜜成者が゜ヌスコヌドのアセンブリをセットアップし、このためのビルドシステムのスクリプトたたはその他のファむルを提䟛するのを支揎する必芁がありたす。



怜玢䞭に芋぀かった興味深いもの

1.「譲枡したコピヌごずに䟡栌を蚭定する堎合ずしない堎合があり、サポヌトを提䟛するか、料金を保蚌するこずができたす。」 これに぀いおは、gnu.org FAQの䞀郚ずしおの回答がありたす 。 ぀たり、金銭のコヌドサポヌトを販売したり、金銭のコヌドを販売したりするこずもできたすが、同時にプログラムのコピヌを受け取った人は、自分に適した方法でそれを配垃するこずもできたす。このテヌマに関するgnu.org FAQリンク。

2. GPLの䞋での「補品」の抂念の䞀般化

Times 「プログラム」ずは、このラむセンスの䞋でラむセンスされおいる著䜜暩のある䜜品を指したす ''

2 䜜品の「゜ヌスコヌド」ずは、䜜品に修正を加えるための䜜品の奜たしい圢態を意味したす。 「オブゞェクトコヌド」ずは、非゜ヌス圢匏の䜜品を意味したす」

この䞀般化により、ラむセンスは゜ヌスコヌド以倖の補品に適甚できたす。

3.「ラむセンス䜜品を他の独立した䜜品ずコンパむルしたす。これらは本質的にラむセンス䜜品の延長ではなく、蚘憶媒䜓䞊で倧きなプログラムを圢成するためにラむセンス䜜品ず接続しおいたせん。コンパむルずその最終著䜜暩が䜿甚されない堎合、オリゞナルの䜜品に関する線集ナヌザヌのアクセスたたは法的暩利を制限するため。 ラむセンスされた䜜品を集玄に含めるこずは、このラむセンスの有効性を集玄の他の郚分に拡匵するものではありたせん。 ぀たり、GPLラむセンスの䞋でコヌド呌び出しずたったく接続されおいないプログラム内のコヌドの孀立した郚分がある堎合、コヌドのこの郚分の゜ヌスコヌドを開く必芁はありたせんそのような状況はほずんど想像できたせんが、ポむントはです。



利点コヌドの完党なオヌプン性により、読者の範囲が広がるため品質が向䞊し、䜜家の範囲が広くなるため開発が加速されたす。 そしお、もちろん、もう䞀぀の利点-あなたは䞖界に良いものをもたらすず感じおいたす。 戊争ではなくオヌプン゜ヌスを䜜りたしょう

短所独自のコヌドおよび/たたは商甚秘密を含むコヌドでGPLラむセンスの䞋で補品を䜿甚する胜力は制限されおいたす。 オンデマンドでそれを䌝える必芁がある堎合、それはどのような秘密ですか



フリヌ゜フトりェア 。 フリヌ゜フトりェアラむセンスにより、ナヌザヌは制限なしでコヌドを䜿甚しお䜕でもできたす。堎合によっおは、玔粋に条件付きの芁件がありたすたずえば、元のラむブラリの䜜成者を瀺す矩務がありたす。 そのようなラむセンスの1぀は、たずえばMITラむセンスです。 これには、 BSDラむセンスファミリも含たれたす。

利点寛倧な商業䌚瀟からの远加の品質コミット。

短所貪欲な䌁業は、コミュニティず共有せずに、コヌドを自分で盗み、䌁業リポゞトリに分岐し、自分だけのために静かに開発できたす。



劣等公的ラむセンス 。

オヌプン゜ヌスコヌドのラむセンスには、LGPL Lesser General Public Licenseおよび関連ラむセンスが含たれたす。 このタむプのラむセンスには、オヌプン゜ヌスずフリヌ゜フトりェアの䞡方の機胜が含たれおいたす。

LGPLは、制限なく、コヌドを開く必芁なく、商甚プロゞェクトを含め、どこでもバむナリ衚珟実行可胜ファむルたたは動的ラむブラリにコンパむルされたコヌドを自由に䜿甚できたす。

ただし、LGPLラむセンスの䞋でプロゞェクト゜ヌスをプロゞェクトのコヌドに静的にリンクする堎合は、オヌプン゜ヌスの䞖界で独自の゜ヌスが必芁になりたす。 幞いなこずに、ラむセンスには゜ヌスコヌドの公開は必芁ありたせん。 悪い点は、これらの゜ヌスが収集されるオブゞェクトファむルの公開が必芁なため、他の人がそれらを再リンクしお、オヌプン゜ヌスのむデオロギヌによっお指瀺された゜フトりェアを倉曎する暩利を遵守できるこずです。

LGPLを䜿甚したプロゞェクトの䟋はQtです。 LGPLラむセンスにより、そのダむナミックラむブラリは、制限なしに独自の゜フトりェアで䜿甚できたす公匏Qtフォヌラムでのこれの議論ずqtcentreりェブサむトでの同様の議論 。

ラむセンス自䜓からの匕甚ずずもに、LGPLの詳现をご芧ください
このラむセンスのロシア語ぞのわかりやすい翻蚳は芋぀かりたせんでしたその条項が元の文蚀に察応しおいないGPL条項に盎接関係する翻蚳のみを芋぀けたした。 これは、gnu.orgの元のラむセンスぞのリンクです。



このラむセンスはGPLに基づいおいたすが、倚くの条項を明確にし、倚くの新しい甚語を導入したす。䞻な甚語は「ラむブラリ」ラむブラリ-これはラむセンスの䞋にある補品の名前、GPLがWorkず呌ぶものおよび「結合」です䜜業」新しいコヌドずラむブラリを䜿甚たたはリンクするず、結合䜜業が埗られたす



「ラむブラリ」ずは、以䞋で定矩されるアプリケヌションたたは結合著䜜物以倖の、本ラむセンスが適甚される察象著䜜物を指したす

「A「結合された䜜品」は、アプリケヌションをラむブラリず結合たたはリンクするこずによっお䜜成された䜜品です。 結合䜜業が行われたラむブラリの特定のバヌゞョンは、「リンクバヌゞョン」ずも呌ばれたす»



ラむセンスの本質の倧郚分は4番目の段萜に蚘茉されおおり、ラむブラリのラむセンスを付録ずずもに配垃するための暙準芁件に加えお、アプリケヌションの䜜成者はラむブラリに動的にリンクするか、誰でもコヌドを収集できるオブゞェクトファむルを提䟛する必芁があるず述べおいたすアプリケヌションファむルを倉曎しお、オブゞェクトファむルを䜜成したす。



より興味深いこず

1.このラむセンスは、GPLに察する远加の譲歩のセットずしおGPLずずもに蚀及されるべきであり、GPLが別個のファむルずしお䜿甚された堎合、LGPLは明確化された远加ファむルずしお蚘述されるべきです。

2.ラむセンスの2番目の段萜 Conveying Modified Versions は、LGPLラむセンスの䞋でラむブラリ自䜓の゜ヌスコヌドに倉曎が加えられた堎合この堎合、ラむブラリ関数ぞの匕数の受け枡しに加えお、これらが倉曎であるこずを明確にしたす、公開された倉曎は、倉曎されたラむブラリの機胜を保蚌するか、LGPLが免陀するこずなくGPLのラむセンスを倉曎する必芁がありたす。

3.ラむセンスの3番目のポむントは、ラむブラリヘッダヌファむルを、ラむブラリを䜿甚するアプリケヌションのバむナリコヌドにコンパむルする機胜を瀺したすアプリケヌションの゜ヌスコヌドを公開する芁件はありたせんが、LGPLラむセンスでアプリケヌションを配垃する芁件がありたす。



利点商業組織のコヌドの品質に察する間接的な関心収集されたラむブラリのコヌドがうたく機胜するこずを望んでいたすず同時に、LGPLプロゞェクトの開発の犁止は、無料の゜フトりェアラむセンスで可胜な「サむレント」です。

短所独自の゜フトりェアでLGPLラむセンスの䞋でラむブラリを䜿甚するには、dllたたは.soでアセンブルされたラむブラリず補品のリンクを敎理する必芁がありたす。 LGPLを䜿甚するコヌドが収集されおいたす。



他の興味深いラむセンスに぀いお知っおいる堎合は、コメントでそれらに぀いお曞くこずができたす。 誰にずっおも面癜いず思いたす。



既存のラむセンスを怜蚎した埌、私はMITラむセンスを最も自由なラむセンスの1぀ずしお遞択したした 。 他の利点の䞭でも、MITラむセンスは非垞に簡朔です-理解可胜であり、掟生補品のオヌプン性に察する暩利を保護するための耇雑なルヌルを含める必芁はありたせん。

このセクションの最埌にあるこれらのリンクの䞭には、MITラむセンスに関するものがいく぀かありたす。 そこで圌女は十分によく蚀われた、私は本質を歪めないために、私は蚀い盎したくない。



セクションの最埌で、ラむセンス情報をプロゞェクトに远加した方法蚭蚈オプションの1぀に぀いお簡単に説明したす。



1.リポゞトリのルヌトに、 このサむトからコピヌしたラむセンステキストを含むlicense.txtファむルたたはLICENCE.txtを配眮したす。

2.すべおの゜ヌスコヌドファむルに次のヘッダヌを远加したした。



サンプルラむセンスヘッダヌ
//////////////////////////////////////////////////// ///////////////////////////////

//

// <ファむル名>

//

// Copyright©<ラむセンス有効期間> <著者名><オプション、著者メヌル>

//

// <ラむセンス名>で配垃添付ファむルLICENSE.txtを参照するか、

// <ラむセンスサむトぞのパス>

//



泚゜ヌスコヌドのヘッダヌにラむセンスの党文が远加されたいく぀かのリポゞトリに出䌚いたした。 おそらくこれがコヌドをより確実に保護する方法ですが、扱うファむルごずにこの長いラむセンス゚ントリをめくるナヌザヌを悩たすでしょう。





ラむセンスに぀いおは、gnu.orgを読むこずもできたす。 圌らはGPLおよび関連するものを䜿甚しお゜ヌスコヌドのラむセンスを取埗する原則に぀いお培底的に話したす。 圌らが提䟛する方法はどのラむセンスにも適甚できるず思いたす。



玄束どおり、興味深い資料ぞの远加リンクのリストでセクションを終了したす。

䟿利なリンク
1.これが私が最初に読んだ蚘事です。 2002、ええ、この蚘事は信じられないほど叀いですが、倚かれ少なかれ関連性があり、蚘事自䜓には、6぀の異なるオヌプン゜ヌスずフリヌ゜フトりェアラむセンスの䟿利な比范版がありたす。 そのようなタブレットでは䞍十分な堎合は、りィキペディアでより匷力なタブレットを芋るこずができたす。

2. 1぀の図のメむンのオヌプン゜ヌスラむセンスに぀いお。

3.オヌプン゜ヌスラむセンスに぀いおもう少し 。

4.オヌプン゜ヌスラむセンスの詳现 。 同じ蚘事にあるMITラむセンスに関する情報 。

5. MITのラむセンスに぀いおの詳现 、歎史的な遠足。

6. MITラむセンスに関する詳现な蚘事 。 さらに、䞀般的なオヌプン゜ヌス゜フトりェアに関するいく぀かの考えも興味深いものです。

7.フリヌ゜フトりェアずオヌプン゜ヌスの違いに関するGNUコミュニティの哲孊を含む非垞に詳现な蚘事 。

8.オヌプン゜ヌス゜フトりェアの䞖界ではそれほど単玔ではない興味深い蚘事 。

9.倧胆で興味深いアむデアを持぀蚘事 ゜ヌスコヌドを開かずに、テストずテスト結果を必芁ずするラむセンスを䜜成したす。

10.トヌスタヌで私がか぀お尋ねた質問 2016幎3月に今それを読み盎すのは面癜かったです。 この件で、 @ littlegugaずいうニックネヌムを持぀ナヌザヌが、最終的に䜿甚したMITラむセンスに぀いおアドバむスしおくれたした。





2.メむンプロゞェクトからコヌドを切断する









そのため、ラむブラリにしたいコヌドが別のリポゞトリに分離されないこずがありたす。 圌は、メむンリポゞトリのあるフォルダヌ内のプロゞェクトの䜜業の最初から生きるこずができたす。これらの゜ヌスの線集の履歎は、メむンプロゞェクトの履歎ず密接に関連しおおり、それを解陀する機䌚はありたせん。



幞いなこずに、すべおはそれほど悲しいこずではありたせん。 このような堎合、gitサブツリヌ分割メカニズムを䜿甚できたす。 ここでこのトリックを孊びたした ただここで蚀及されおいたすが、別の方法であるフィルタヌ分岐に぀いおの話です。 おもしろければ、この石ハンマヌを䜿っお私が経隓した冒険に぀いお、モノリシックリポゞトリをサブモゞュヌルに分割し、サブモゞュヌルを䜿甚しおそれらからさたざたなものを接着するこずに぀いお、さらに詳しく説明できたす。 ここでは、メむンリポゞトリの特定のフォルダの線集履歎を別のリポゞトリに転送する方法を簡単に説明したす。



1. cd {main-repo-path}
最初に、メむンリポゞトリフォルダヌをアンフックするリポゞトリのルヌトに移動する必芁がありたす。



2. git subtree split -P {サブモゞュヌル盞察パス} -b {サブモゞュヌル分岐}
{submodule-relative-path} -ブランチで分離するフォルダヌぞのリポゞトリのルヌトからの盞察パス。

{submodule-branch} -パス{submodule-relative-path}にあるフォルダヌの゜ヌスの操䜜履歎党䜓がコピヌされるブランチ。



このコマンドを呌び出した埌、{submodule-branch}ブランチがロヌカルリポゞトリに远加され、{submodule-relative-path}フォルダヌの倉曎に関連付けられたすべおのコミットが含たれたす。 このコマンドを呌び出すず、新しいブランチが䜜成されおコミットがコピヌされるだけで、それ以倖は倉曎されたせん。



泚コピヌされたコミットに関連付けられたコミットメッセヌゞは倉曎されないたたであるこずに泚意しおください。 フォルダヌの線集の履歎に䞍必芁な情報を保存できたすフォルダヌ内ずフォルダヌ倖の䞡方のコミットに倉曎があった堎合。 私はそれを回避する方法を知りたせんし、どうにかしおそれを回避するこずは党く可胜だずは思いたせん。



3. git push {submodule-repo-URL} {submodule-branch}{master}
新しいブランチを別のリポゞトリにプッシュしたす。



{submodule-repo-URL} -フォルダヌの倉曎履歎を保存するリモヌトリポゞトリのURL。

{master} -remootリポゞトリ{submodule-repo-URL}の{submodule-branch}ブランチが受け取る名前。 これがリポゞトリに远加される最初のブランチである堎合、gitのメむンブランチに名前を付けるずいう叀代の䌝統に埓っお、「マスタヌ」ず呌ぶのが最善です。



このコマンドを呌び出した埌、{master}ずいう名前の新しいブランチが、{submodule-relative-path}フォルダヌぞの倉曎の履歎を含むURL {submodule-repo-URL}にあるリポゞトリに远加されたす。



4. git branch -D {submodule-branch}
{submodule-relative-path}フォルダヌの線集履歎を持぀ブランチが䞍芁になった堎合、このブランチを削陀する必芁がありたす。 -D-bigは、ブランチの削陀を匷制するこずを意味したす。 -dでブランチを削陀するず、gitは誓いたす削陀する前にこのブランチをプッシュしなかったず蚀っおいたすgitは実際に別のリポゞトリにプッシュしたものを撃ちたせん。





䞀般に、それですべおです。 私のメむンプロゞェクトで説明した手順に埓っお、将来のcpprtラむブラリの゜ヌスコヌドを線集する履歎を分離し、非垞に倧たかなリポゞトリを取埗しお、ファむルの倉曎履歎党䜓を保存したすコミットメッセヌゞにゎミが含たれおいる堎合もありたす。



リポゞトリは準備ができおいたした...しかし、それはただ公開にはほど遠いものでした。 リポゞトリを適切な圢匏にするこずも想定されおいたした。 このため、゜ヌスコヌドずラむセンスでは䞍十分でした。テスト、䟋、組み立お可胜なすべおのアセンブリメカニズムの怜蚎、あらゆる皮類のread meファむル、ドキュメントなどの䜜成を支揎する材料の束を䜜成する必芁がありたした。これらすべおのために、リポゞトリの構造を怜蚎する必芁がありたす。この蚘事の次のセクションでは、プロゞェクトの構造に぀いお説明したす。



䟿利なリンク

1. サブモゞュヌルずサブツリヌのどちらかを遞択しお、私が䞀床尋ねた質問。かなり長い議論ず倚くのリンクがありたすそのうちのいく぀かは既に䞊で䜿甚したした。おそらく、プロゞェクトのモゞュヌル構成のトピックに興味がある人は、ディスカッションを読んでリンクをたどるこずが面癜いず思うかもしれたせん。ずころで、私はこの機䌚に、Andy_Uにこの問題に぀いお掻発に議論しおくれたこずに感謝したいず思いたす-最終的にサブモゞュヌルを遞択したずいう事実にもかかわらず。

2. サブツリヌを操䜜しようずしたずきに遭遇した困難に぀いお説明した別の質問 ...ずころで、誰かが私が間違ったこずを説明できるかもしれたせん。



3.リポゞトリの構造に関する考察









だから、リポゞトリの構造...私の意芋では、これはアヌキテクチャのカテゎリからのものです。コヌドのアヌキテクチャは、その芁玠の盞互䜜甚の原則を蚭定したす。アヌキテクチャ-それは構造でもありたす-プロゞェクトのリポゞトリは、他のプロゞェクトずの盞互䜜甚の原則を蚭定したす。ここで蚀う「他のプロゞェクト」ずは、コヌドベヌス、アセンブリシステム、たたはビゞネスプロセスだけではありたせん。私はたた、あなたのコヌドを䜿甚し、それを倉曎する人々を意味したす。



私の理解のために、私はナヌザヌの芳点ず貢献者の芳点からプロゞェクトの芁件を策定しようずしたした。



ラむブラリナヌザヌの䜍眮からの眺め





ラむブラリに粟通しおいるずきに、発生順に芁件をリストしたす

。1.自分が䜕を扱っおいるかを理解したい。これがプロゞェクトのルヌトにあるものの簡単な説明ず、GitHubのプロゞェクトペヌゞに衚瀺されるように、ある皮のReadme。たあ、もちろん、ドキュメント。できれば写真付き。

2.コヌドの䜿甚方法を確認したい。テスト、コヌドの䜿甚䟋、そしおそれがどのように行われるかは明確でした。

3.プロゞェクト自䜓に぀いお...アセンブリ、構成、統合に最小限の神経ず時間を費やしたいず思いたす。ヘッダヌず、コンパむラヌずプラットフォヌム甚のコンパむル枈みラむブラリヌがあるフォルダヌがあれば、それは玠晎らしいこずです。接続し、本番にリンクしたす。このビルドシステムを理解したくありたせん。

泚ここで、さらにC ++に固有のこずに぀いお話したす。他の蚀語では、すべおがややシンプルになりたす...

4.プラットフォヌムに䟝存しないプロゞェクトがありたす自分でビルドシステムに適応する必芁なく、自分でラむブラリをビルドできるようにしたいず考えおいたす。蚀い換えるず、CMakeが必芁ですCMakeが明確でない堎合は、倧䞈倫です。埌で説明したす。

远加芁件

5.したがっお、ラむブラリには可胜性が倚すぎたす。配送䞭のツヌルはありたすかそしお、すぐに収集するこずをお勧めしたす。

6.私はあなたのプロゞェクトを長い間䜿甚しおいたす。圌が最近曎新したず聞きたしたか䜕が倉わったのか知りたい。



提瀺された芁件を考慮しお、以䞋の構造が埗られたす



ファむルツリヌ衚蚘法に぀いお
:



file_in_root

, . . file_in_root. /, , , .



/folder_in_root

, .



-file_in_folder

, . , , . . , - , , , .



-/folder_in_folder

, , .







1.どんな皮類の図曞通ですか

README.txt-プロゞェクトの簡単な説明。

/ doc-プロゞェクトずそのAPIを詳现に説明するファむルです。



2.テストず䟋。

/ tests-できるだけ簡単に実行できるプロゞェクトをテストしたす。

/ examples-できるだけシンプルに実行する必芁があるサンプル。



3.すぐに接続したす...

/ include-アセンブルされたラむブラリのAPIにアクセスするためのむンタヌフェむス。

/ lib-゜ヌスの静的ラむブラリぞのアセンブリ。

/ bin-動的ラむブラリぞの゜ヌスのアセンブリ。

泚 libおよびbinフォルダヌには、できればメむンのコンパむラヌずプラットフォヌムのアセンブリヌを含める必芁がありたす。



4.自分で組み立おたい

/ src-プロゞェクトの゜ヌスコヌド。

cmake_readme.txt -cmakeファむルを䜿甚しおプロゞェクト構成を生成する方法に関するオプション情報。

CMakeLists.txt-アセンブリ構成のファむル。



5.ツヌルここに行きたしょう

/ tools-ラむブラリでの䜜業を簡単にするツヌル。収集されるか、゜ヌスコヌドの圢匏で。



6.

change_list.txt-プロゞェクトの最新の倉曎に関する情報を曎新したす。



図曞通寄皿者の芖点からの倖芳





ラむブラリを知るずきの芁件は、出珟順にリストされおいたす

0。ラむブラリを知る最初の段階では、私は寄皿者ではなく、ナヌザヌです。したがっお、最䜎限、私の芁件には䞊蚘のナヌザヌ芁件が含たれたす。

1.私はあなたのプロゞェクトが奜きで、それを開発したいず思いたす。友奜的な貢献者の家族に参加する方法に぀いお、䜕らかの皮類のReadmeを読みたいず思いたす。

2.ラむブラリが内郚にどのように配眮されおいるかを理解したい。開発者向けの詳现なドキュメントが必芁です。理想的には、プロゞェクトのビルドシステムにもドキュメントが必芁です。

3.ビルドシステムで䜜業するずき、プロゞェクト党䜓を登りたくありたせん。アセンブリに豊富な構成ファむルたたは远加プログラムが必芁な堎合は、別のフォルダヌに入れおください...䞀般に、すべおが適切である必芁があり、ファむルは目的別にグルヌプ化する必芁がありたす。

その他の芁件

4.カスタムツヌルはもちろん優れおいたす...しかし、プロゞェクトは本圓に倧きなものです。開発者向けのツヌルが必芁です。



党䜓ずしお、芁件を考慮しお、理想的なプロゞェクトの構造に぀いお以䞋の明確化が埗られたす



。1.導入情報

contributors_README.txt-開発に投資したい人のためのプロゞェクトの簡単な説明。



2.ドキュメント

/ doc-

/ developer_doc-プロゞェクトの詳现を含むドキュメント。

泚この構造では、ナヌザヌドキュメントもdocフォルダヌ内の別のフォルダヌ䞀郚のuser_docに保存する必芁がありたす。私の意芋では、このようなドキュメンテヌションの構造は、構造的な順序に加えお、ドックを持っおいる奜奇心の匷い読者に興味をそそりたす。「入門者のためのドックの䞭には䜕がありたすか」-そしお、読者をおそらく貢献者にしたす。



3.プロゞェクト内の順序

/ build

ビルドシステムのあるフォルダヌ。プロゞェクトのこのフォルダの倖に、最小限のビルドシステムファむルをハングアップするこずをお勧めしたす。



4.開発

ツヌル / tools-

/ developer_tools

ドキュメントず同様に、目的に合わせおツヌルを収集したすナヌザヌ固有、開発者固有。



ここにリストされおいる芁件は、私の知芚にずっお䞻芳的なものです。それに぀いお䜕か考えがあれば、それを共有しおください。



GitHubを䜿甚しおプロゞェクトを分析しおいるずきに、CMakeナヌティリティを操䜜するためのファむルに぀いお頻繁に蚀及しおいるこずに気付きたした。さらに、いく぀かの資料から刀断するず、C ++でのオヌプンプラットフォヌムのクロスプラットフォヌム゜フトりェアリポゞトリの叀兞的な構造の圢成に圱響を䞎えたのはCMakeでした。圌は逃げられないずいう気持ちが醞成されおいたした。来る...



4. CMakeぞの道









謝蟞 CMakeを勉匷するきっかけずなったスタニスラフ・マカロフNipherisに感謝したす。



CMakeは、特定のメむクシステムおよび/たたは䞀郚のIDEのプロゞェクトの構成ファむルを生成しお、ナニバヌサルな抜象的な構成サポヌトされおいるビルドシステム/ IDEのリストに基づいおC / C ++プロゞェクトを構築できるナヌティリティです。生成埌、CMakeの終了時に取埗された構成および/たたはプロゞェクトファむルは、特定のビルドメカニズムによっお既に䜿甚されおいたす。圌らの仕事の結果ずしおのみ、組み立おられた補品が埗られたす。

CMakeはメタメむクツヌルであり、C / C ++プロゞェクトのアセンブリシステムを抜象化したものであるず蚀えたす。



私はcpprtラむブラリのリポゞトリ構造を構築するずき、CMakeの䜿甚をあらゆる方法で回避したこずを認めたす。兞型的な先延ばし...さたざたな蚀い蚳を思い぀き、Python、ボディヌシャツ、そしお私が知っおいるむチゞクでビルドシステムを構成し、サブモゞュヌルにいく぀かの壊れやすいデザむンを付けたした。このすべおの狂気の神栌化は、CMakeの私の拒絶を正圓化する理論党䜓でした。同様に、cpprtラむブラリは非垞に小さいため2぀のファむルのみ、その統合のために、「ラむブラリ」の゜ヌスコヌドをサブモゞュヌルずしおナヌザヌプロゞェクトに盎接挿入するだけで十分です。たた、サンプルずツヌルの゜ヌスコヌドもサブモゞュヌルで配垃する必芁がありたす。これにより、ナヌザヌは必芁に応じおラむブラリのカブにそれらを取り蟌むこずができたす。

さらに、䟋ずツヌルはcpprtラむブラリに䟝存するため、ラむブラリ自䜓も泚意これらのサブリポゞトリにサブモゞュヌルずしおビルドする必芁がありたす。結局、䟋はラむブラリをプロゞェクトに埋め蟌む方法を瀺しおいるはずです。



したがっお、この異端の理論に基づいお、Frankensteinのモンスタヌのようなリポゞトリを、gitメカニズムで接続されたいく぀かのミニリポゞトリから瞫い付けたした。それは本圓のゎミでしたここで賞賛できたす。蚀い蚳を拒吊する堎合は、CMakeを教えるだけではなく、これだけを行いたした。



しかし、良心はテレビではありたせん。圌女の音を消すこずはできたせん。無料の怜玢の過皋でランダムな資料に出くわし、次第に気づきたした。CMakeは、C ++向けのオヌプン゜ヌスクロスプラットフォヌム゜フトりェアの珟代䞖界の柱の1぀です。CMakeを䜿甚せずにこのようなプロゞェクトを行うこずは、たったくナンセンスです。これは完党に間違っおいたす。蚘事でそのような決定に぀いお人々に䌝えるこずは、ずりわけ、人々に悪いこずを教えるこずを意味したす。



したがっお、4月12日火曜日、私は座っおCMakeを勉匷したした。翌日の倕方たでに、私はすでにプロゞェクトのCMake構成が機胜しおいお、自分の䞍安に笑いたした。思ったより簡単で、ずおも䟿利でした。



以䞋は、CMakeに没頭したこずの蚘録です。これが誰かを助けるこずを願っおいたす。



CMakeが必芁な理由の詳现をご芧ください。
, CMake. , , , , . – .



, ++ , (Java, C#, Python, ..)? , ++ ( = ). , , , , .



, , ( = + + + - ) . , C++ , IDE. , ? .



. , , , , .

, Visual Studio. , , , – , , -- .



– MinGW, Eclipse IDE . , — , . MinGW+Eclipse , , . , , Eclipse IDE, 
 NMake . 
 IDE. – .



, — , — IDE. , .



, , CMake! CMakeLists.txt, CMake – , CMake.exe, ( IDE), -/IDE . , !



CMake. .



PS: , CMake , CMakeLists.txt. . , : ( IDE). CMake .



— . .



CMakeを知った埌、私自身ず私の知り合いの䞀郚ず、C ++の5幎の経隓を持぀非垞に経隓豊富な人が、ほずんどすべおのオヌプン゜ヌスラむブラリを誀っお䜿甚しおいるこずがわかりたした。 ほがすべおのクロスプラットフォヌムラむブラリは、CMakeアセンブリのためのシンプルで䟿利な機䌚を提䟛し、すぐにアセンブルされたラむブラリ、たたは最悪の堎合はIDE甚の既補のプロゞェクトファむルを探しおいたす-CMakeを䜿甚しお10秒でIDEのプロゞェクトを生成する代わりに、さらに、収集したい内容ラむブラリ自䜓、テスト、䟋、ツヌル、その他のサポヌトプロゞェクトなどを埮調敎する機胜を備えおいたす。

顕埮鏡を䜿った広範囲の釘付けのこの話は、カップにお茶を泚ぐのを簡単にするために長い砂糖の袋を発明した人に぀いおの有名な悲しい話を思い出したしたが、誰もこれらの袋を正しく䜿甚せず、男は自殺したした。



C ++のオヌプン゜ヌス゜フトりェアでCMakeを䜿甚する可胜性を無芖するたびに、ラむブラリの䜜成者の1人が䞖界で叫ぶこずを忘れないでください。 ツヌルを正しく䜿甚しおください。







14の暙準ず1぀の新芏がCMakeではない理由に぀いお
CMakeに関連しお、読者はおそらく、14の暙準ずそれらを1぀にたずめようずするず衚瀺される15の暙準に関する有名な写真を思い出すでしょう。 ただし、この堎合、この写真は䞍適切です。 実際のずころ、CMakeは、プロゞェクトのアセンブリむンフラストラクチャに異質のものずしお埋め蟌む必芁はありたせん。 メむンプロゞェクトのアセンブリむンフラストラクチャに䟿利な構成ファむルたたはIDEのプロゞェクトを取埗するには、CMakeを単独で実行するだけで十分です。その埌、これらのファむルたたはプロゞェクトは、プロゞェクトの既存の組織およびタヌゲットプラットフォヌムに察応するものずしお簡単に埋め蟌むこずができたす。



CMakeはビルドシステムではありたせん。 CMake over buildシステム。 圌は圌らを支配したす。









どれくらいの蜂蜜、蜂蜜、単䞀のタヌル分子なし...しかし、もちろん欠点もあり、実際にそれらに぀いお話したす。



CMakeが䜕であるか、CMakeがなぜであり、CMakeがどれほど優れおいるかを知ったので、それを知る時が来たず思いたす。 だからクロニクル...





以䞋に瀺すすべおのむベントは、実際には2016幎4月12日火曜日に行われたした。 ブラりザのペヌゞ芁求履歎によっお埩元されたした。



0:35材料の初期怜玢









CMake ここから をダりンロヌドしおむンストヌルした埌、レッスンを探し始めたした。



" cmakeチュヌトリアル "の芁求で、最初のリンクは公匏のドックに぀ながりたした。 基本的に、私はそれを理解したした。 cpprtはただ非垞に小さなプロゞェクトであるため、ドックの最初の5぀のステップを十分に理解しお、ラむブラリを構築するための考えられるすべおの目暙構築ツヌルず䟋を含むの構成を説明したした。



Googleの最初のペヌゞにある「 CMake habrahabr 」のリク゚ストに応じお、教育的なものずしお考案された3぀の蚘事がありたした。 私はこの蚘事が䞀番奜きでしたちなみに、「cmake tutorial」のリク゚ストで2番目に脱萜しおいたす。 いく぀かの点でドックの翻蚳に䌌おいるいく぀かの点での良いチュヌトリアル蚘事-しかし、より簡朔。 セクションに分かれおおり、各セクションでCMakeの機胜に぀いお説明し、䞍芁な殻を䜿わずに簡単な䟋を瀺したす。 この蚘事を远加のトレヌニング資料ずしお䜿甚したした。



他のリンクが芋぀かりたした
1. 別の CMakeチュヌトリアル。 私は本圓に始たりが本圓に奜きでした-プロゞェクトの構造さえ非垞にはっきりず矎しく曞かれおいたした。 しかし、最初の小さく理解しやすい䟋の埌、著者は䟋を劇的に耇雑にし始め、私は混乱し、䞊蚘の蚘事を䜿い続けるこずに決めたした。

2. LZ4ラむブラリのCMakeアセンブリの小さな分析 GitHubを䜿甚した比范的小さなプロゞェクト。 おそらく、CMakeの経隓がある人にずっおは、分析はかなり良いものですが、圌は、このビゞネスにずっお非垞に新しいので、倧量のコヌドずLZ4に固有のいく぀かの倉数を含む少量のコメントで私を怖がらせたした。

3.よい入門レッスン 。



ハブでサヌフィンをしおいるずきにすでに芋぀けたリンクのうち、 CMakeの時蚈ずいう短い蚘事に非垞に驚かされたす。 私はコヌドから䜕も理解しおいたせんでしたが、それは同じくらいクヌルで、奇劙です。





2:00最初のCMake構成を構築したす









CMakeで、午前2時に戻りたした。 私は簡単にレッスンに粟通し、可胜な限り単玔なプロゞェクトで、いく぀かのテストで緎習するこずにしたした。 次の内容のフォルダヌを䜜成したした {cmake_test}ずいう名前にしたす 。



main.cpp

構成を生成するアセンブリのテストファむル。

ファむルの内容
#include <iostream> int main() { std::cout << "Hello from CMake!" << std::endl; return 0; }
      
      









CMakeLists.txt

゜ヌスアセンブリ構成main.cppの説明を含むファむル。 ここで、さらに新しい各CMakeチヌムに詳现なコメントをしたす。

ファむルの内容
cmake_minimum_requiredコマンドにコメントし、CMakeのコマンド匕数に関するいく぀かの単語
公匏cmake_minimum_requiredドキュメント



このコマンドは、この構成を構築できるCMakeの最小バヌゞョンを蚭定したす。 バヌゞョンが叀すぎる堎合にCMakeを曎新するようにナヌザヌにすぐに䌝えるために䜿甚されたす。



これは最初のCMakeコマンドであるため、ここで匕数を枡すのが慣䟋であるこずに泚意しおください。 匕数間の区切り文字は空癜スペヌス、タブ、改行です。 同時に、CMakeには名前付き匕数がありたす。 したがっお、たずえば、提瀺された呌び出しでは、「バヌゞョン2.8.8」は、cmake_minimum_requiredコマンドの名前付き匕数VERSIONの匕数の倀2.8.8の転送です。 次のコマンドプロゞェクトの呌び出しでは、名前なしで匕数が枡されたす。

正盎なずころ、枡された倀が匕数であるか、 匕数の倀であるかをCMakeが認識する原理はよくわかりたせんでした。 コマンドを呌び出す構文に぀いお公匏のドックを読んだ埌でも、私はこれを理解しおいたせんでした...しかし、95の堎合、それなしで生きるこずができるように思えたす。



cmake_minimum_requiredバヌゞョン2.8.8



プロゞェクトチヌムぞのコメント
プロゞェクトチヌムの公匏ドキュメント



このコマンドは、CMakeプロゞェクトに関する情報を蚭定したす。 これは、䞀般的にIDEのプロゞェクトず呌ばれるものではありたせん。 これは、プロゞェクト階局の1぀䞊のレベルを指したす。 Visual Studioではこれは゜リュヌションず呌ばれ、Eclipseではワヌクスペヌスず呌ばれたす 。

CMakeプロゞェクトのフレヌムワヌク内で、いく぀かのラむブラリず実行可胜ファむルをアセンブルするための構成、およびそれらを盞互にリンクするためのルヌルを指定できたす。



この堎合、プロゞェクトにtest_projectずいう名前を付けたす

プロゞェクトtest_project



add_executableコマンドに関するコメント
add_executableコマンドの公匏ドキュメント



プロゞェクトにタヌゲットを远加しお、実行可胜ファむルをビルドしたす。 実行ファむルずラむブラリは、CMakeのビルドタヌゲットの目暙になる堎合がありたすアセンブリの目的は、CMakeビルドシステムに関するドックのセクションの冒頭にありたす。



最初の匕数はビルドタヌゲットの名前です。その埌、実行可胜ファむルが収集される゜ヌスコヌドファむルぞのパスがリストされたす。

さらに埮調敎するために、いく぀かの远加の匕数がありたす。これに぀いおは公匏ドックで読むこずができたす。 単玔なプロゞェクトの堎合、指定された構成で十分です。



この堎合、1぀の゜ヌスをアセンブリに远加したす-main.cpp

add_executabletest_executable main.cpp





これらすべおのテストファむルを䜜成した埌、コン゜ヌルを開いお次のこずを行いたした。



cd {cmake_test}

mkdirビルド

cdビルド

テストアセンブリのあるフォルダヌに移動したした。

その䞭にフォルダヌを䜜成し、そこにCMakeコマンドを䜿甚しお構成ファむルを生成したす。

䜜成されたフォルダに移動したした。



cmake -G "MinGW Makefiles" ../

MinGWツヌルチェヌンを介しおアセンブリ構成ファむルを生成するための呌び出し。

-G "MinGW Makefiles" -構成ファむルを䜜成するためのゞェネレヌタヌの遞択。 Generator-抜象CMake構成から特定のツヌルチェヌンたたはIDEの構成ファむルを生成するプログラム。

この堎合、MinGWツヌルチェヌンに付属しおいるMinGW32-makeツヌルのメむクファむルを取埗したかったのです。

../-CMakeLists.txtが配眮されおいるフォルダヌぞのパスず、構成の説明。

説明したコマンドを呌び出した埌、プロゞェクトをビルドするための構成ファむルが、呌び出し元のフォルダヌに衚瀺されたす。 この堎合、゜ヌスmain.cppからの1぀の実行可胜ファむルのアセンブリ構成が予期されおいたした。



代替オプション
@SilentBob は、構成ファむルを生成するずきに䜿甚できる䟿利な属性を提案したした 。 そのため、アセンブリ構成を生成するフォルダヌに察しおmkdirを呌び出すこずはできたせん。



属性-B {build-folder} 。 {build-folder}は、CMakeが構成を生成するフォルダヌです。 䜜成する必芁はありたせん。この呌び出しが行われるフォルダヌ内にCMake自䜓によっお䜜成されたす。 CMakeはmkdirず同様のアクションを実行したす。



このコマンドを䜿甚するず、構築時に身䜓の動きを枛らすこずができたす。 たずえば、コンピュヌタヌの任意のフォルダヌにあるこの䟋の構成を生成し、同時にこのフォルダヌにあるビルドフォルダヌに構成をきれいに配眮するには、次のコマンドを呌び出したす。



cmake {cmake_test} -Bbuild -G "MinGW Makefiles"



ビルドフォルダヌが䜜成され、CMakeは䜜成されたビルド構成をその䞭に配眮したす。





この呌び出しは午前2時25分に行いたした。 時間は、リク゚ストの履歎に基づいお、぀たり、次の問題に察する最初のリク゚ストの時間に基づいお埩元されたす。



2:25問題





䜕も集たりたせんでした。 CMakeは次の゚ラヌを生成したした゚ラヌに関連するメッセヌゞの郚分のみを残し、パスを非衚瀺にしたす。



{my cmake_path} /share/cmake-2.8/Modules/CMakeMinGWFindMake.cmake:20MESSAGEでのCMake゚ラヌsh.exeがPATHで芋぀かりたしたここで{some path}

PATHにsh.exeがないシェルからcmakeを実行したす。





私はそれに぀いおグヌグルで調べお、 そのような情報を芋぀けたした。 簡単に蚀うず、sh.exeがシステムパスで䜿甚可胜な堎合、MinGWのゞェネレヌタヌは機胜したせん。 理由-ただ最埌たで理解できず、倜の3時半には特に敎理したくありたせんでした。特に、私の堎合、この問題は簡単に解決できるこずを考慮しおください。



sh.exeが远加されたシステムパス私の堎合はgitを䞀時的に削陀し、CMakeを再床起動したしたが、...゚ラヌが再床衚瀺されたしたが、別の゚ラヌが発生したした。 新しい゚ラヌはもっず気のめいるように芋えたした゚ラヌに関するメッセヌゞの郚分のみを残したす。



Cオブゞェクトの䜜成CMakeFiles / cmTC_ebbab.dir / testCCompiler.c.obj

C\ MinGW \ bin \ gcc.exe -o CMakeFiles \ cmTC_ebbab.dir \ testCCompiler.c.obj -c C\ Users \ test \ Desktop \ ‚јї \ cpprt_FINAL \ current \ github \ build \ CMakeFiles \ CMakeTmp \ testCCompiler.c

gcc.exe゚ラヌC\ Users \ test \ Desktop \ ‚јї \ cpprt_FINAL \ current \ github \ build \ CMakeFiles \ CMakeTmp \ testCCompiler.cそのようなファむルたたはディレクトリはありたせん



さたざたな゜ヌスを再床読んだ埌、この゚ラヌ自䜓が次の理由で発生したこずに気付きたした。 特定のツヌルチェヌンの構成ファむルを生成する前に、CMakeはこのツヌルチェヌンのコンポヌネントコンパむラ、リンカなどの存圚をチェックし、これらのコンポヌネントが正しく機胜するかどうかもチェックしたす。 これを行うには、䞀時フォルダヌに゜ヌスコヌドtestCCompiler.cを䜜成し、コンパむラヌを䜿甚しおビルドしようずしたす。 私の堎合、䜕らかの理由でCMakeはそのようなファむルを䜜成したせんでした。

残念ながら、これに぀いお具䜓的なリンクを述べるこずはできたせん。このメカニズムのいく぀かの゚コヌを以䞋に瀺したす。



䞀般に、゚ラヌ自䜓はもちろん、䞊蚘の理由で発生したした。 しかし、これが原因ではなく結果であるこずは明らかでした。 理由を芋぀けるために、私は4泊目の始たりの前に、玄40分間グヌグルで怜玢したした。 それは「蟲民」の粟神における兞型的な二日酔いでした。 このク゜コヌドを機胜させ、最埌に、そしお眠りに぀くこずは...私を打ち負かしたした。 最初にfirstめたした。 これは私が倜に3時半たで掘り䞋げた最も賢明なリンクの1぀です。



解決策 問題は䜕でしたか。すでにこの蚘事を曞いおいる最䞭でした。 実際には、アセンブリが実行されたフォルダぞのパスにはロシア語の文字が含たれおいたした。 MinGWのmakefileのアセンブリが成功したため、同様の欠陥のないパスにフォルダヌにアセンブルする䟡倀がありたした。

結論 Unicodeパスに泚意しおください 䜕かが機胜せず、理由がわからない堎合は、パスでナニコヌドを探し、ナニコヌドなしでパスを䜜成しおみおください



10:38Visual Studio向けのビルド









私は、MinGWのアセンブリずはもうやりたくないずいう自信を持っお目を芚たした。 Visual Studioをむンストヌルしおいたので、最初に構成を収集しおたたは、スタゞオの堎合は゜リュヌションずプロゞェクトを収集しお、他のツヌルチェヌンの構成の生成をテストしおみおください。



コン゜ヌルを開き、{cmake_test} / buildフォルダヌに移動しおCMakeを呌び出し、別のゞェネレヌタヌを指定したした。



cmake -G "Visual Studio 14 2015" ../



奇跡 ビルドフォルダヌでは、test_project.sln゜リュヌション、いく぀かのプロゞェクトここで少し驚いた-なぜいく぀か、および構成倉曎の堎合にCMakeが゜リュヌションずプロゞェクト蚭定を曎新できるこずを理解するために必芁な補助ファむルの束が圢成されたした。毎回蚭定を再生成する必芁がありたす。



゜リュヌションを開きたした。 はい、そうは思いたせんでした。 main.cppを実行可胜ファむルにアセンブルするための予想されるtest_executable.vcxprojプロゞェクトに加えお、他の2぀の巊利きのプロゞェクトALL_BUILD.vcxprojおよびZERO_CHECK.vcxprojが゜リュヌションに含たれおいたした。 私はグヌグルで調べたした。 スタックオヌバヌフロヌに関するこの回答を芋぀けたした。 それから、これらは、CMakeLists.txtファむルが倉曎された堎合、CMakeが各ビルドの前にプロゞェクトファむルを曎新するたさにそのプロゞェクトであり、これらのプロゞェクトファむルの生成元であるこずに気付きたした。 䞀般に、すべおが正しいので、䜜成されおいるはずです。



ZERO_CHECKを取り陀く方法
cpprtリポゞトリの最終的な圢成䞭に、CMakeの䟝存関係なしZERO_CHECKおよびBUILD_ALLプロゞェクトなしでスタゞオのCMake構成を生成する必芁がありたした-CMakeを持たないナヌザヌがこれらのプロゞェクトを実行できるようにするためです。 ZERO_CHECKを取り陀く方法は、 ここで芋぀かりたした 。 もちろん、これはCMakeのアむデアを倧きく壊す倉曎が行われるず構成の曎新を壊すず蚀われたしたが、ZERO_CHECKなしでスタゞオの゜リュヌションを生成するには、CMAKE_SUPPRESS_REGENERATIONオプションをTRUEに蚭定するだけです次のように蚭定できたす-DCMAKE_SUPPRESS_REGENERATION = TRUE、-コマンドラむンを䜿甚しお゜リュヌション生成を構成する堎合。 このオプションが蚭定されおいる堎合、BUILD_ALLおよびその他の付随するCMakeファむルおよびフォルダヌは匕き続き䜜成されたすが、プロゞェクトを損なわずに削陀できたす。



ZERO_CHECKを取り陀くだけでは十分ではなかった理由
これはCMakeに察する最初の繊现な誀解です。事実、私が理解しおいるように、CMakeは盞察パスで構成を生成できたせん。 どういう意味



たずえば、プロゞェクトにCMakeを含むパスを含めるず、CMake構成に関連するパスを指定した堎合でも、転送されたフォルダヌぞの絶察パスが䜜成されたす。 これは、アセンブリ結果が曞き蟌たれるフォルダヌぞのパスを含む、すべおのビルド構成のすべおのパスに適甚されたすビルド出力directort



説明されおいるパス生成の機胜により、絶察パスは単䞀ナヌザヌの特定のパスにバむンドされるため、リポゞトリにCMakeで生成された構成およびプロゞェクトファむルを保存するこずができなくなりたす。



私はこの問題を解決する方法をただ芋぀けおいたせん。 私はオプションCMAKE_USE_RELATIVE_PATHSを芋぀けたしたが、公匏ドックには「機胜しない可胜性がありたす」ずいうメモがありたす。そしお、い぀ものように、公匏ドックは嘘を぀きたせん。 うたくいきたせん



この叀い議論では、盞察パスを䜿甚する機胜はCMakeには䞀般的ではなく、したがっお期埅できないず述べおいたすが、ogre3dゲヌム゚ンゞンのフォヌラムに関する少し最近の議論では、 この答えは同じ゜リュヌションを提䟛したす。私はそのフォヌラムナヌザヌをogre3dで䜿甚しようずしたした。



この問題がむンタヌネット䞊でどれほど䞍十分にカバヌされおいるかに驚いおいるず蚀いたす。 私の意芋では、これは非垞にデリケヌトな問題です。 私の意芋では、cmakeからcmakeたで独立した構成を生成するオプションは、バヌゞョン管理システムのむンポヌトリポゞトリオプションに䌌おいたす。 圌女はそうでなければなりたせん。

たぶん私はひどく芋おいたしたか、どういうわけか間違っおいたしたか どういうわけかこの問題を自分で解決した堎合は、コメントであなたがどのようにそれを行ったかを教えおください。 この蚘事の別のセクションでこれらのネタバレを䜜り盎し、このセクションの著者ずしおあなたを瀺したす。







Visual Studioでは、test_executableプロゞェクトをスタヌトアッププロゞェクトずしお遞択し、ctrl + f5を抌したした。 コン゜ヌルに「Hello from CMake」ず印刷されたした。 うらしっきヌ也杯







ボヌナスCMakeによるナニバヌサルアセンブリ
@SilentBobは、圌のおかげで、CMakeで䜜成された特定のビルド構成のアセンブリの開始を抜象化できる非垞に䟿利なコマンドを提案したした 。



cmake --build {ビルドパス} --config {ビルドタむプ}

{build-path} -CMakeによっお生成されたビルド構成があるフォルダヌぞのパス。

{build-type} -ビルドタむプDEBUGたたはRELEASE。



このコマンドにより、特定のツヌルチェヌンたたはIDEの構成を構築できたす。 私の意芋では、いく぀かのクロスプラットフォヌムビルドスクリプトを䜜成するずきに、特に自動化に非垞に圹立぀機胜です。





䜜業開始から玄1時間が経過したした。



11:24CMakeを介したアセンブリのためのリポゞトリの準備





これで、CMakeをメむンプロゞェクトに接続できたす。 CMakeの前は、すでに述べたように、私のプロゞェクトにはサブモゞュヌルに関する内郚組織がありたした。 CMakeのおかげで開かれた芋通しを考慮しお、サブモゞュヌルの䜿甚は攟棄される可胜性がありたす。 リポゞトリのクロヌンを別に䜜成し、すべおのサブモゞュヌルの゜ヌスコヌドを取埗し、CMakeを䜿甚しおアセンブリを構成する方法に぀いお考え始めたした。



リポゞトリをわずかに再構築したため、芋た「アダルト」リポゞトリのように人間に芋えたした。 以䞋は、CMakeの操䜜に盎接関係するプロゞェクト構造の䞀郚です。



/ build-゜ヌスコヌドを収集するこずになっおいる空のフォルダヌ。

/ include-ラむブラリAPIにアクセスするためのヘッダヌを含むフォルダヌ。

/ src-ラむブラリの゜ヌスコヌドを含むフォルダヌ。

/ examples-さたざたなサンプルの゜ヌスコヌドを含むフォルダヌ。

-/ __ example_hierarchies__-テストクラス階局を含むフォルダヌ以䞋を参照。

-/ simple_examples-小さなテストケヌスの゜ヌスフォルダヌ。

/ tools-プロゞェクトを操䜜するためのツヌルのあるフォルダヌ。

-/ console-珟時点ではツヌルは1぀だけで、その名前はconsoleです。

CMakeLists.txt-プロゞェクトのさたざたな芁玠を収集できるCMakeファむル。



珟圚のラむブラリリポゞトリ

この蚘事に蚘茉されおいるこずは、 e9c34bbコミットにも圓おはたりたす。



__example_hierarchies__の詳现
__example_hierarchies__フォルダヌには、cpprtマクロで登録されたいく぀かのクラス階局が含たれおいたす。 これらのクラスにはフィヌルドがありたせん。盞互に継承されるだけです。仮想クラスで 、空のメ゜ッドはcpprtが抜象クラスでどのように機胜するかを瀺すためにのみ必芁です。 cpprtラむブラリはクラス継承に関するメタデヌタに倚くの泚意を払い、さたざたなテストや䟋で__example_hierarchies__からの継承階局を䜿甚できるため、これらの階局が必芁でした。





ラむブラリの配信の䞀環ずしお、次のピヌスを組み立おるこずができるず刀断したした。







ラむブラリの黒色 。

実行可胜ファむルの青色 。

アセンブリタヌゲット間で共有される゜ヌスコヌドを含むフォルダヌの緑色 。



図曞通

1. cpprt-実際には、ラむブラリ自䜓。 / srcフォルダヌにある゜ヌスコヌドず/ includeフォルダヌにあるむンタヌフェむスから収集されたす。

静的ラむブラリにアセンブルされ、䟝存関係はありたせん。

䞀䟋

2. simple_examplesは、OOPに慣れるための動物クラスの叀兞的な階局を蚘述し、この階局に基づいおラむブラリAPIを䜿甚する単䞀のファむルで構成される小さな䟋です。

cpprtラむブラリに応じお、実行可胜ファむルにアセンブルされたす。

蚈噚

3. コン゜ヌル -珟時点では、これは実際にはラむブラリの機胜を実蚌する䟋でもありたすが、独立したツヌルに倉える蚈画です。

コン゜ヌルから、登録枈みクラスの継承ツリヌに関する情報を衚瀺したり、オブゞェクトずクラスの䞡方の文字列名を䜿甚しおクラスオブゞェクトを䜜成および削陀したりできたす。

実行可胜ファむルにアセンブルされたす。これは、cpprtラむブラリずクラスのテスト階局に䟝存したす。この䟋では、コン゜ヌルを芋るこずができたす。



構造の準備ができたした。 CMakeを䜿甚しおこれらのアヌティファクトを組み立おるための構成を説明する「䜕もありたせん」がありたした。



11:30cpprtラむブラリの構築









cpprtラむブラリには2぀のファむルしか含たれおいなかったずいう事実にもかかわらず、私は将来の䜜業に取り組み、フォルダヌに含たれるすべおのファむルを再垰的に接続する方法をすぐに孊ぶこずにしたしたさらに倚くの゜ヌスパスはリストしたせん。 私はそれをグヌグルで怜玢し、GLOB_RECURSE匕数を指定したfileコマンドの䜿甚を説明するこのリンクを芋぀けたした。



小さなProject-OSRMプロゞェクトの CMake構成を 簡単に芋お、芋぀かった情報を䜿甚しお次の構成コヌドを䜜成したした。





CMakeLists.txt
setコマンドに関するコメント
セットに関する公匏ドキュメント



このコマンドは、倉数の倀を蚭定たたは再むンストヌルするためのものです。 最初の匕数は倉数の名前です。 次に、その倀が蚭定されたす。 この堎合、パス「。」を枡したす。これは、通垞どおり、珟圚のフォルダヌ、぀たりCMakeLists.txtが配眮されおいるフォルダヌこの堎合、リポゞトリのルヌトを意味したす。



泚 CMake呌び出し䞭にコマンドラむンから倉数を枡すこずは可胜ですか CACHEパスで倉数を蚭定するず可胜ですスタックオヌバヌフロヌに぀いおの答えは次のずおりです。 面倒に芋えたす-したがっお、私の意芋では、コマンドラむンからオプションコマンドを介しおフラグを枡す方が良いです詳现は埌で説明したす。



蚭定CPPRT_ROOT_PATH



ラむブラリ゜ヌスのルヌトフォルダヌ倀を蚭定したす。

倉数参照に぀いお
倉数参照構文に関する公匏ドキュメント



CMakeは、倉数倀にアクセスするために共通のメカニズムを䜿甚したす。 ドックで述べたように、CMakeは倉数の参照が蚘述されおいる堎所で倉数の倀を盎接眮き換えたすたたは同じ名前の倉数が定矩されおいない堎合は空の文字列を挿入したす。 このため、テキスト倉数 Quoted Argument および倉数ぞの他の参照でも同様の挿入を䜿甚できたす。 ドックからの䟋



$ {outer _ $ {inner_variable} _variable}



私が理解しおいるように、ここで倉数inner_variableの倀は別の倉数の名前の䞀郚です。 前だけの奇跡。



蚭定CPPRT_SOURCES_PATH $ {CPPRT_ROOT_PATH} / src



ラむブラリむンタヌフェむスのルヌトフォルダヌ倀を蚭定したす。

蚭定CPPRT_INCLUDE_PATH $ {CPPRT_ROOT_PATH} / include



ファむルコマンドに関するコメント
fileコマンドの公匏ドキュメント



GLOB_RECURSE匕数を指定したfileコマンドの䜿甚に぀いおのみ説明したす。 このようなコマンドは、コマンド呌び出しで指定された怜玢ルヌルに埓うファむルおよびフォルダヌパスの再垰怜玢を実行したす。 ルヌルは、芋぀かったパスのリストが曞き蟌たれる倉数の名前に続く匕数によっお指定されたす。

, – , . , , , , (, ).



file GLOB_RECURSE, GLOB. , .



№1: , CMake . file GLOB_RECURSE (, , ) . ( ).

№2: , CMake file GLOB, file GLOB_RECURSE. . ( IDE) CMake / .



file GLOB
, , , CMake ( IDE) () CMakeLists.txt, . — CMakeLists.txt.

, , CMake file GLOB GLOB_RECURSE. , CMakeLists.txt () . 䞍䟿。





, – .



#

# . CPPRT_SOURCES

# .

file(GLOB_RECURSE CPPRT_SOURCES

${CPPRT_SOURCES_PATH}/*.h

${CPPRT_SOURCES_PATH}/*.cpp





# , .

# CPPRT_HEADERS.

file(GLOB_RECURSE CPPRT_HEADERS

${CPPRT_INCLUDE_PATH}/*.h





# add_library
add_library



. . – , : STATIC ( ) DYNAMIC (, ).



# cpprt.

add_library(cpprt STATIC ${CPPRT_SOURCES} ${CPPRT_HEADERS})





ファむルの準備が敎ったら、/ buildフォルダヌに移動しお構成ファむルを収集したした。cmake-G



“ Visual Studio 14 2015” ../



すべおがすぐに統合されたした。cpprt.vcxprojプロゞェクトで解決策がありたした。゜リュヌションを開き、スタゞオを介しおアセンブリを開始したした...はい。ラむブラリは問題なく組み立おられたした。



これは12:41に発生したもので、Facebookリンクを開いた時間に基づいお説明できたす。

Facebookの埌、䞀時的に他のタスクに切り替えたした。



16:09simple_examplesサンプルのアセンブル





2時間半埌にcmakeの構成に戻りたした。ここで、ラむブラリのサンプルを䜜成するために、構成の生成を可胜にする必芁がありたした。これを行うには、プロゞェクト間の䟝存関係の敎理に察凊する必芁がありたした-結局、simple_examplesプロゞェクトはcpprtラむブラリに静的にリンクされたした







静的ラむブラリをリンクするコマンドは、ハヌバヌのCMakeレッスンで蚀及されたした2番目の䟋。これらのレッスンず他のいく぀かの゜ヌスを読んだ埌、次の構成コヌドを䜜成したした。



CMakeLists.txt
#===============================================================

# Head



cmake_minimum_required(VERSION 2.8.8)



# option
option



-.

– , .

— , . , - CMakeLists.txt , , CMake , .

– . .



, ( cmake -G .. ) ( ). :



-D< >=ON/OFF



: set , CACHE-. , , option .



# , ,

#

option(BUILD_EXAMPLES «Build cpprt examples» OFF)



#-----------------------------------------------------------------------------------------------

# cpprt. .



project(cpprt_projects)



set(CPPRT_ROOT_PATH .)

set(CPPRT_SOURCES_PATH ${CPPRT_ROOT_PATH}/src)

set(CPPRT_INCLUDE_PATH ${CPPRT_ROOT_PATH}/include)



file(GLOB_RECURSE CPPRT_SOURCES

${CPPRT_SOURCES_PATH}/*.h

${CPPRT_SOURCES_PATH}/*.cpp





file(GLOB_RECURSE CPPRT_HEADERS

${CPPRT_INCLUDE_PATH}/*.h





include_directories(${CPPRT_INCLUDE_PATH})

add_library(cpprt STATIC ${CPPRT_SOURCES} ${CPPRT_HEADERS})



#-----------------------------------------------------------------------------------------------

###- Examples





# include_directories
include_directories



( inlcude paths) CMakeLists.txt.

, – , . – , BEFORE AFTER .



: , . , , target_include_directories , . .



include_directories(${CPPRT_INCLUDE_PATH})



# if
if



– . , .



: else() endif(), , ( : «Note that the expression in the else and endif clause is optional» ), , , , . , #endif .



# BUILD_EXAMPLES

# ON – .

if(BUILD_EXAMPLES)



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - -

### — Simple examples



# .

set(SIMPLE_EXAMPLE_ROOT ${CPPRT_ROOT_PATH}/examples/simple_examples)



# .

# .

add_executable(simple_examples

${SIMPLE_EXAMPLE_ROOT}/SimpleExamples.cpp

${CPPRT_SOURCES}





# target_link_libraries
target_link_libraries



. , , . . – target_link_libraries ( : «Repeated calls for the same {target} append items in the order called» ).



: , , CMake. . , .



target_link_libraries(simple_examples cpprt)

endif(BUILD_EXAMPLES)

#========================================================





CMakeの蚭定からスタゞオ゜リュヌションを生成しようずしたした。たず、サンプルをビルドするオプションを枡し、次にそれを䜿甚したせん。たずえば、スタゞオ甚の゜リュヌションをサンプルプロゞェクトずずもに生成したコマンドは次の



ずおり



です。プロゞェクト甚にコンパむルされた実行可胜ファむルがないこず。間違いはありたせんでした。



幞いなこずに、すべおが非垞に簡単でした-サンプルプロゞェクトをスタヌトアッププロゞェクトずしお蚭定するのを忘れたしたアセンブリ埌、CMakeはデフォルトでBUILD_ALLを蚭定し、その䞭に実行可胜ファむルは収集されたせん。すべおを蚭定した埌、テスト甚であるはずのすべおが画面に印刷されたした。



これは、1714たでに履歎から回埩できたために発生したした-FastDelegateプロゞェクトをどれだけ開いたかで刀断したすこれは、コヌルバックをプラスで凊理するための優れたマむクロラむブラリです。私はそれを私のメむンプロゞェクトに䜿甚し、そこでビルドシステムがどのように䜜られたかを芋たいず思いたした。それは䜕もないこずが刀明した...しかし、それは可胜であり、正しい。



17:14コン゜ヌルサンプルツヌルのアセンブル





コン゜ヌルを組み立おるために残った。原則ずしお、このアセンブリに必芁なすべおのコマンドを既に知っおいたした。プロゞェクト構造を思い出しおください







コン゜ヌルはテストクラス階局でアセンブルできたす。ここで、「クラス階局を䜿甚する」ずいう抂念は、コン゜ヌルの組み立お元の゜ヌスのリストにrepository / examples / __ example_hierarchies__の゜ヌスを含めるこずを意味したすヘッダヌ怜玢パスずしおではなく、単に別の゜ヌス゜ヌスずしお。



コン゜ヌルアセンブリの説明を含む構成。コヌドを詰たらせないように䟋を構築するために、䞊蚘の構成なしで構成を䜿甚したす。



CMakeLists.txt
#==========================================================

# Head



cmake_minimum_required(VERSION 2.8.8)



# -

# console :



# .

option(BUILD_TOOLS «Build cpprt tools» OFF)



#

#

option(CONSOLE_WITH_EXAMPLE «Add examples to console» ON)



#-----------------------------------------------------------------------------------------------

### — cpprt code



project(cpprt_projects)



set(CPPRT_ROOT_PATH .)

set(CPPRT_SOURCES_PATH ${CPPRT_ROOT_PATH}/src)

set(CPPRT_INCLUDE_PATH ${CPPRT_ROOT_PATH}/include)



file(GLOB_RECURSE CPPRT_SOURCES

${CPPRT_SOURCES_PATH}/*.h

${CPPRT_SOURCES_PATH}/*.cpp





file(GLOB_RECURSE CPPRT_HEADERS

${CPPRT_INCLUDE_PATH}/*.h





include_directories(${CPPRT_INCLUDE_PATH})

add_library(cpprt STATIC ${CPPRT_SOURCES} ${CPPRT_HEADERS})



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - -

# ,

# __example_hierarchies__. , , .



set(EXAMPLE_HIERARCHIES_ROOT

${CPPRT_ROOT_PATH}/examples/__example_hierarchies__





file(GLOB_RECURSE EXAMPLE_HIERARCHY_PATHES

${EXAMPLE_HIERARCHIES_ROOT}/*.h

${EXAMPLE_HIERARCHIES_ROOT}/*.cpp





#-----------------------------------------------------------------------------------------------

###



if(BUILD_TOOLS)



# – ,

# .

set(TOOLS_ROOT ${CPPRT_ROOT_PATH}/tools)



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - -

#

set(CONSOLE_ROOT ${TOOLS_ROOT}/console)



# , :

if (CONSOLE_WITH_EXAMPLE)



#

add_executable(cpprt_console

${CONSOLE_ROOT}/CPPRTConsole.cpp

${EXAMPLE_HIERARCHY_PATHES}





# –

# (include path).

#

# ,

# , target_include_directories

# ( , )

target_include_directories(cpprt

PUBLIC

${EXAMPLE_HIERARCHIES_ROOT}





# cpprt

target_link_libraries(cpprt_console cpprt)



else(CONSOLE_WITH_EXAMPLE)



# -

# simple_example

add_executable(cpprt_console

${CONSOLE_ROOT}/CPPRTConsole.cpp



target_link_libraries(cpprt_console cpprt)



endif(CONSOLE_WITH_EXAMPLE)



endif(BUILD_TOOLS)





コン゜ヌルはすぐに集たっお獲埗したした。すべお準備が敎いたした。



その時たでに19:23-私はグヌグルで「ミントティヌがなだめる」ず刀断した。



すべおの䜜業の結果珟圚プロゞェクトで䜿甚されおいるような構成



CMakeLists.txt
#============================================================

# Head



cmake_minimum_required(VERSION 2.8.8)



option(BUILD_ALL «Build cpprt tools» OFF)



# . .

#

# .

#

# ,

# .

option(BUILD_TOOLS «Build cpprt tools» ${BUILD_ALL})

option(CONSOLE_WITH_EXAMPLE «Add examples to console» ON)



option(BUILD_EXAMPLES «Build cpprt examples» ${BUILD_ALL})



#-----------------------------------------------------------------------------------------------

### — cpprt code



project(cpprt_projects)



set(CPPRT_ROOT_PATH .)

set(CPPRT_SOURCES_PATH ${CPPRT_ROOT_PATH}/src)

set(CPPRT_INCLUDE_PATH ${CPPRT_ROOT_PATH}/include)



file(GLOB_RECURSE CPPRT_SOURCES

${CPPRT_SOURCES_PATH}/*.h

${CPPRT_SOURCES_PATH}/*.cpp





file(GLOB_RECURSE CPPRT_HEADERS

${CPPRT_INCLUDE_PATH}/*.h





include_directories(${CPPRT_INCLUDE_PATH})

add_library(cpprt STATIC ${CPPRT_SOURCES} ${CPPRT_HEADERS})



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — # Global examples setup



set(EXAMPLE_HIERARCHIES_ROOT ${CPPRT_ROOT_PATH}/examples/__example_hierarchies__)



file(GLOB_RECURSE EXAMPLE_HIERARCHY_PATHES

${EXAMPLE_HIERARCHIES_ROOT}/*.h

${EXAMPLE_HIERARCHIES_ROOT}/*.cpp





#-----------------------------------------------------------------------------------------------

### — Tools



if(BUILD_TOOLS)

set(TOOLS_ROOT ${CPPRT_ROOT_PATH}/tools)



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — ### — Console project

set(CONSOLE_ROOT ${TOOLS_ROOT}/console)



if (CONSOLE_WITH_EXAMPLE)

add_executable(cpprt_console

${CONSOLE_ROOT}/CPPRTConsole.cpp

${EXAMPLE_HIERARCHY_PATHES}



target_include_directories(cpprt_console

PUBLIC

${EXAMPLE_HIERARCHIES_ROOT}



target_link_libraries(cpprt_console cpprt)



else(CONSOLE_WITH_EXAMPLE)

add_executable(cpprt_console

${CONSOLE_ROOT}/CPPRTConsole.cpp



target_link_libraries(cpprt_console cpprt)



endif(CONSOLE_WITH_EXAMPLE)



endif(BUILD_TOOLS)



#-----------------------------------------------------------------------------------------------

###- Examples



if(BUILD_EXAMPLES)



#- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — ### — Simple examples

set(SIMPLE_EXAMPLE_ROOT examples/simple_examples)



include_directories(${CPPRT_INCLUDE_PATH})

add_executable(simple_examples

${SIMPLE_EXAMPLE_ROOT}/SimpleExamples.cpp

${CPPRT_SOURCES}



target_link_libraries(simple_examples cpprt)

endif(BUILD_EXAMPLES)

#============================================================





したがっお、CMakeナヌティリティを䜿甚しお、基本的なレベルの実甚的なレベルの玔粋な時間を4時間で簡単に、そしお䜕もせずに芋぀けたした。私の意芋では、CMakeの匷力な知識を身に付けるこずは4時間の䟡倀がありたす。



結論ずしお、CMake



私が気に入ったもの

匷力なナヌティリティに぀いおお話したす。それは、倚くのプラットフォヌムずコンパむラヌのための構成で蒞気を発する必芁を本圓に取り陀きたす。スタゞオの埌に、CMakeでmingw32-make + Eclipse IDEのメむクファむルを生成し、以前のVisual Studioで行ったのず同じくらい簡単に゜ヌスを組み立おたずきに、これを感じたした。

気に入らなかった点

非垞に奇劙な蚀語蚭蚈。区切り文字ずしお空癜を䜿甚した匕数、名前付き匕数を䜿甚する奇劙な原理、プロゞェクトプロパティずアセンブリ目暙を蚭定するための透過的なメカニズムではないプロパティはすべおのアセンブリ目暙に察しおグロヌバルに蚭定される堎合がありたすが、特定の目暙に察しおロヌカルに蚭定されるこずもありたす実際、すべおの操䜜をファむルシステムず組み合わせ、特定の操䜜はコマンド匕数を䜿甚しお送信されたす。



ある瞬間、゚むリアンはCMakeの蚀語を曞いたように思えたした。ずおも賢いですが、少し違った考え方をしおいたす。



5.ドキュメントに぀いお









すぐに蚀わなければならない-私はcpprtラむブラリの英語のドキュメントを線集する勇気を持っおいたせんでした。珟圚、すべおのドキュメントは、この䞀連の蚘事を読むだけで送信されたす。これは、おそらくドキュメントがないこずを意味したす。4週間のマラ゜ンの埌、䞀息぀いたらすぐにこの欠陥を修正しようずしたす。その結果、このシリヌズの蚘事が執筆されたした。



実際にはドキュメントを䜜成しなかったずいう事実にもかかわらず、ドキュメントを䜜成するための最良の基瀎ずなるものに぀いお理論的な研究を行いたした。ここで芋぀けた情報を提䟛したす。情報は䞻にこの蚘事ずそのコメントから取埗されたした。



Wiki
.



:

— , , , .

— . .

— .

— « » .

— .



短所

— . , UML, . , . , .

— , . , - / ?





Googleドキュメント
.



:

— .

— , , .

— ( ).

— .

— ( ).

— doc, pdf html.



短所

— goolge. sistemshik : « google».

— . , , . googledocs?





酾箠
Doxygen



, Doxygen Norserium . : , . , .



, : « , Doxygen , . , — . »



:

— , , . , , , — - .

— latex- .



短所

— .

— , .





平文
はい – , .



: « . <...> . , plaintext. ». , Plain text .



:

— , . — .

— .



短所

— . Plain text , , .

— .





おそらくご存知のように、このようなオヌプン゜ヌスドキュメントのトピックぞの最初の玹介の埌、Doxygenはこれたでのずころお気に入りであるこずが刀明したした。これはおそらく、私がコヌドを曞くのが奜きで、あらゆる皮類の退屈なドキュメントに目を通すこずを奜たないプログラマヌであるずいう事実によるものです。



それにもかかわらず、私にずっおは、良いドキュメントはDoxygenだけではできたせん。これは、APIに粟通し、堎合によっおはいく぀かの簡単な図を衚瀺するための優れた゜リュヌションです。しかし、倚くの堎合、UMLのほかに倧きくお耇雑な画像やむラストを䜿甚しお、コヌドの動䜜を詳しく説明するより詳现な蚘事が必芁です。ずにかく、あなたは自分でやらなければならないでしょう、ペン、゜ヌスコヌドに関するコメントだけではうたくいきたせん。



ドキュメントに぀いおはこれ以䞊蚀うこずはありたせん。曞き蟌み-補足。



6.図曞通振興に぀いお









ここでは、この䞀連の蚘事を陀いお、ただ経隓がありたせん。これは、ラむブラリを促進するための実隓的な詊みです。あなたの経隓に぀いお人々に話しおください。このアプロヌチがどれほど優れおいるか芋おみたしょう。



この出版物および図曞通自䜓に察する読者の肯定的な反応がある堎合、このシリヌズの蚘事を英語を話す聎衆に合わせお、どこかに公開しようずしたすredditがあるこずは知っおいたす...誰かが良いリ゜ヌスを知っおいるかもしれたせんそしお、我々は衚瀺されたす...



プロモヌションに぀いおは、今のずころ、おそらく、私はそれ以䞊蚀うこずはありたせん。



7.結論





私の研究、過ち、そしお最も重芁なこずずしお、他の人々の玠晎らしいコメントず圌らのおかげでなされた倉曎が、読者の皆さん、私よりも早くこの道を進むこずを願っおいたす。



集合的な創造性のアむデア
, , - . , : . , ?



GitHub, GitHub — ( ). - , , — ( ?).



GitHub , — . — ?









, .



:



Speccyfan . bmp jpg.



- UML creately .




All Articles