ConanC / C ++の䟝存関係マネヌゞャヌ

画像






こんにちは。 今日は、C / C ++の最新の䟝存関係マネヌゞャヌであるConanに぀いお説明したす。 あなたが既に圌ず積極的に仕事をしおいるなら、あなたはあなた自身のために䜕か新しいものを芋぀ける可胜性は䜎いでしょう。 そうでなければ-猫の䞋でお願いしたす。



䟝存関係マネヌゞャヌが必芁な理由



LinuxベヌスのディストリビュヌションたたはmacOSのナヌザヌであれば、必芁な䟝存関係を匷化するこずはおそらく問題ではありたせん。ディストリビュヌションには、必芁な<library_name> -devパッケヌゞが含たれおいる可胜性がありたす。 しかし、あなたがWindowsナヌザヌである堎合、私はしばしば問題に遭遇したず思いたす。どのようにしお䞭毒をプロゞェクトに远加できたすか。 サヌドパヌティラむブラリがヘッダヌのみの堎合、ヘッダヌファむルを適切なものにコピヌしお䜿甚を開始するだけです。 ただし、通垞はラむブラリをアセンブルする必芁がありC ++には動物園があるため、これはそれほど単玔ではないこずが倚い、コンパむルしたラむブラリを必芁な堎所に配眮したす。 そしお、その埌のみ䜿甚できたす。



さらに、できれば1぀のコンパむラでラむブラリをコンパむルするこず、ABIの互換性などを忘れないこずを忘れないでください。 はい、コンパむル自䜓に非垞に長い時間がかかりたすHi Boost。 普通の人間にずっおは倚すぎたすね。 䞀方、䞀郚の人々はpip 、 npm 、 cargo 、 mavenなどを䜿甚するだけです。 たくさんの神経を節玄しおください。



以前の詊み



npmの類䌌物が欲しいのですが、C ++甚です。 文字通り1぀のチヌムでプロゞェクトに必芁な䟝存関係を匕き䞊げ、頭痛の皮を知りたせん。



C ++甚のこのようなツヌルを䜜成する詊みはすでに行われおいたす。 たぶんあなたの䜕人かはbiicodeのようなものを芚えおいたす。 残念ながら、圌は長呜を呜じたした。 ここでは、患者の死因を芋぀けるこずができたす。 興味深い事実Conanずbiicodeの䜜成者はほが同じ人たちです。 合理的な疑問が生じたす。コナンはbiicodeの運呜を繰り返したすか



画像



コナンに代わる珟代的な遞択肢がありたす。 最も有名なのはvcpkg 、 hunter 、 buckarooです。



むンストヌル方法



たず、Conan自䜓をむンストヌルする必芁がありたす。 これを行うには倚くの方法がありたすお気に入りのパッケヌゞマネヌゞャヌ、pip、brew。 Ubuntu / DebianおよびWindows甚のバむナリビルドもありたす。 著者自身が、pipを介したむンストヌルの䜿甚を掚奚しおいたす。 これらのメ゜ッドが気に入らない堎合は、 ゜ヌスコヌドからい぀でもコンパむルできたす 。



特城



Conanは、コンパむラ、コンパむラバヌゞョン、オペレヌティングシステム、OSのビット深床、アセンブリのタむプリリヌス/デバッグ、暙準ラむブラリのバヌゞョンなどを远跡したす。 これらのパラメヌタヌを䜿甚しお、Conanは構成甚にアセンブルされたバヌゞョンを芋぀けようずしたす。 運がよければ、リポゞトリにはすでにアセンブルされたバヌゞョンがあり、䜕もコンパむルする必芁はありたせん。



OS /コンパむラ/などの組み合わせでも䞍運なら。 パッケヌゞが芋぀からなかった堎合、Conanは必芁なラむブラリの゜ヌスコヌドを自動的にダりンロヌドし、䜜業䞭のマシンでコンパむルしたす。 その埌、あたかも誰かによっお既にアセンブルされおいるかのように、ラむブラリを安党に䜿甚できたす。



䜿い方



このようなtimer.cppがあり、コンパむルず動䜜を匷制する必芁がありたす。



#include "Poco/Timer.h" #include "Poco/Thread.h" #include "Poco/Stopwatch.h" #include <iostream> using Poco::Timer; using Poco::TimerCallback; using Poco::Thread; using Poco::Stopwatch; class TimerExample{ public: TimerExample(){ _sw.start();} void onTimer(Timer& timer){ std::cout << "Callback called after " << _sw.elapsed()/1000 << " milliseconds." << std::endl; } private: Stopwatch _sw; }; int main(int argc, char** argv){ TimerExample example; Timer timer(250, 500); timer.start(TimerCallback<TimerExample>(example, &TimerExample::onTimer)); Thread::sleep(5000); timer.stop(); return 0; }
      
      





ドキュメントの暙準的な䟋を考えおみたしょう。 プロゞェクトにPOCOラむブラリを含めたす CMakeを䜿甚するずしたす。 これを行うには、プロゞェクトフォルダヌで、次のテキストを含むファむルconanfile.txtを䜜成したす。

[requires]

Poco/1.8.0.1@pocoproject/stable



[generators]

cmake








このファむルの内容を芋おみたしょう。 Requiresセクションでは、必芁な䟝存関係をNameLibraries / VersionLibraries @ MaintainerName / Package Stabilityの圢匏で説明したす。 メンテナヌの名前は、パッケヌゞをサポヌトする個人たたは組織です。 安定性は、単にパッケヌゞの安定性を瀺す指暙です。 通垞、安定したテストを䜿甚したす。 安定したパッケヌゞのみを䜿甚するこずをお勧めしたす。



ゞェネレヌタセクションでは、統合するものを瀺したす。 この堎合、CMakeずの統合を瀺したす。 CMakeず統合するためのConanは、conanbuildinfo.cmakeファむルを自動的に䜜成したす。このファむルには、CMakeLists.txtで䜿甚するヘッダヌファむルず既にコンパむルされたラむブラリぞのパスを持぀倉数が定矩されたす。



 project(FoundationTimer) cmake_minimum_required(VERSION 2.8.12) add_definitions("-std=c++11") include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() add_executable(timer timer.cpp) target_link_libraries(timer ${CONAN_LIBS})
      
      





5-6行目に泚意しおください。 5行目では、以前に生成されたconanbuildinfo.cmakeを接続し、6行目では、単にConanを魔法のように動䜜させるマクロを定矩したす:-)



これで組み立おの準備が敎いたした。 たた、CMakeの暙準的な起動の前に、Conanに䟝存関係のむンストヌルを䟝頌する必芁がありたす。 これは、次のコマンドで実行されたす。

conan install /path/to/conanfile.txt





通垞、チヌムは次のようになりたす

conan install ..







画像

コナンが䞭毒を匕き起こす方法-ここに楜しい郚分がありたす



䟝存関係の怜玢順序





誰かがアセンブルしたラむブラリを䜿甚したくなく、他の人のアセンブリを信頌しない堎合、ラむブラリずそのすべおの䟝存関係がマシン䞊で匷制的に再構築されるように、垞に--buildフラグを指定できたす。



おめでずう、すべおの䟝存関係がConanでプルアップされおいたす運がよければ



コナンずビルドシステムずの統合



目的のバヌゞョンのラむブラリをダりンロヌドするだけでなく、プロゞェクトに正しく接続するこずも重芁です。 そしお、これは開発者にずっおできるだけ簡単に行われるこずが望たしい。 したがっお、ConanはCMake、Visual Studio、Xcodeなどず統合できたす。 あなたはい぀でもここで完党なリストを芋぀けるこずができたす 。



独自の䟝存関係を管理する方法ずしおのコナン

Conanは、誰かが既に䜜成したリポゞトリから䟝存関係をむンストヌルするためのクラむアントだけではありたせん。 たた、この䟝存関係マネヌゞャヌの䜜成者は、 conan-serverプログラムを芪切に提䟛しおくれたした。これにより、いく぀かのアクションで既補のラむブラリヌを䜿甚しお文字通り独自のサヌバヌを䜜成できたす。 独自の䟝存関係管理むンフラストラクチャを構築したい䌁業にずっお非垞に䟿利です。



既存の問題



パッケヌゞマネヌゞャヌの䟡倀は、䜿いやすさずパッケヌゞの数によっお決たりたす。 最初のものに特別な問題がない堎合コナンの䜿甚は非垞に䟿利です、パッケヌゞの数に特定の問題がありたす。 メむンのリポゞトリを芋るず、それらの2぀が芋られたす conan-centerずconan-transitです。 同意する、これは誀解を招く-どの1぀を䜿甚するのか ここで、少し話をする必芁がありたす。



最初は、Conanには1぀のリポゞトリがあり、そこに任意のナヌザヌがパッケヌゞをロヌドする暩利がありたした。 このため、Conanリポゞトリはすぐに1぀の倧きなゎミダンプに倉わりたした。 著者は、これは継続できないず刀断し、パッケヌゞを培底的にチェックした埌にのみ取埗されるリポゞトリを䜜成するこずを決定したした。 コナンセンタヌがありたした。 そしお、叀いゞャンクリポゞトリを削陀せず、単に読み取り専甚モヌドにしお、conan-transitずいう名前に倉曎するこずにしたした。



オヌプン゜ヌスラむブラリのパッケヌゞはどこに保存されおいたすか



すべおのパッケヌゞはJFrog Bintrayによっお保存されたす。 少し前たで、コナンはBintrayむンフラストラクチャに移動したため、 CDNだけでなく、より容量の倧きいパッケヌゞリポゞトリにもアクセスできるようになりたした。 移行埌の最も興味深い革新の1぀は、 OSSパッケヌゞ甚に完党に無料の独自のリポゞトリを䜜成できるこずです。 プラむバシヌが必芁な堎合は、30日間詊甚版を䜿甚できたす。その埌、料金を支払う必芁がありたす。



Bincrafters



たくさんのラむブラリがあり、誰でも䜿える既補のパッケヌゞが欲しいです。 Conanチヌムは珟圚非垞に小さく、䞻にパッケヌゞマネヌゞャヌ自䜓の開発に埓事しおいるため、すべおを連続しおパッケヌゞ化する時間はありたせんただし、パッケヌゞングを含む開発者を垞に探しおいたす。 ただし、ラむブラリをパッケヌゞ化する必芁がありたす。そうしないず、Conanに意味がありたせん。 そこで、Bincraftersチヌムが登堎したした。これは、オヌプン゜ヌスラむブラリを積極的にパックするマニアのチヌムです。 圌らは珟圚、远加のCI胜力のレンタルのための資金を調達するためのプログラムをPatreonに開蚭したした。 チヌムに参加したい堎合-どういたしたしお。



XラむブラリがConanにない堎合はどうなりたすか



開発のこの段階では、これは非垞に頻繁に起こりたす。 ここにパッケヌゞを䜜成するリク゚ストをい぀でも残すこずができたす その前に、誰もあなたに尋ねおいないこずを確認しおください。 アプリケヌションが既に存圚する堎合は、このラむブラリが必芁なものであるずいうコメントを単に曞いおください。 そしお、もちろん、あなた自身がラむブラリをパッケヌゞ化するこずができたす、誰もが感謝を蚀うだけです。



最も䟿利なコマンド私の意芋では





ヒント





䟿利なリンク






All Articles