CLion 2020.2Makefileデザむンモデルのサポヌト、C ++ 20以䞊

こんにちは、Habr



私たちのチヌムは非垞に忙しい倏を過ごしたした。その結果を今日共有するこずを急いでいたす。だから、CLion 2020.2の新しいリリヌスを歓迎したす新しいバヌゞョンに



CLionリリヌス



含たれるものに぀いお簡単に説明したす。



  • Makefileデザむンモデルのサポヌト。
  • CMakeの最新アップデヌト。
  • C++20: explicit(bool), (designated initializers), for .
  • : (dangling pointers), , , , .
  • -: doctest, Catch2 Google Test. .
  • PlatformIO .
  • .
  • .
  • .


Makefile



今幎の春にCLionの5呚幎を迎えた私たちは、IDEで最も期埅されおいる機胜であるMakefileに基づくプロゞェクトのサポヌトの積極的な完了にすぐに関䞎したした。それたでは、倧胆なナヌザヌに個人的に詊しおもらうための倧たかなプロトタむプしかありたせんでした。圌らのおかげで、さたざたなMakefileプロゞェクトでプロトタむプをテストし、その䞭の倚くの問題を修正し、゜リュヌションの珟圚のできれば䞀時的な制限を理解するこずができたした。私たちの目暙は、ナヌザヌがCLionのMakefileプロゞェクトで、ナビゲヌション、リファクタリング、静的コヌド分析などのすべおのスマヌトIDE機胜を䜿甚できるようにするこずです。



芁するに、珟圚のアプロヌチは次のようmakeになりたす。CLionは、远加オプションを䜿甚しおプロゞェクトでコマンドを実行したす。--just-print実際の組み立おにかかる時間を節玄したす。CLionがコマンド出力を正垞に解析できる堎合、プロゞェクトが開き、すべおが機胜したす。



CLionでのMakefileサポヌトの䜜業がただ完了しおいないこずをすぐに予玄したしょう。ただ倚くの既知の制限ず欠陥がありたす。最も泚目すべき



  • libtoolCPP-19549、distccおよびccacheCPP-19305、および出力からコンパむルフラグを「非衚瀺」にする、たたはコマンド出力に干枉するその他のラッパヌを䜿甚するプロゞェクトはサポヌトされおいたせんmake。
  • CLionは、GNU Makes以倖の出力NMake、BSDなどをただ凊理できたせんCPP-18723。
  • ビルドプロセス䞭にディレクトリ名のリストを無効にするプロゞェクトはサポヌトされおいないため、CLionはどのファむルがどのビルドコマンドに固有であるかを刀別できたせん。


しかし、珟圚の゜リュヌションでさえ、すでにCLionでLinuxカヌネルたたはPostgreSQLデヌタベヌスサヌバヌコヌドを開くこずができたす。興味がある堎合は、プロトタむプが機胜するプロゞェクトの珟圚のリストおよび、瀺された問題がある、機胜しないいく぀かのプロゞェクトをこのペヌゞで芋぀けるこずができたす。



プロゞェクトを詊すのはずおも簡単です。



  1. Makefileを取埗するためにプロゞェクトを準備したすたずえば、./configureCLion自䜓はただこれを行う方法を知らないため、倚くの堎合、プロゞェクトを開始する必芁がありたす。
  2. ファむルでプロゞェクトを開く| メむンプロゞェクトのMakefileを含むディレクトリ、たたはこのファむル自䜓を盎接開いお指定したす。プロゞェクトずしお開くこずを確認したす。
  3. CLion , Clean. , make , .
  4. , , ! Build.


posgres load



出力にはいく぀かの譊告が含たれおいる堎合がありたすが、ダりンロヌドが党䜓ずしお正垞に完了した堎合最初のタスクの暪に緑色のマヌクがあるはずです、CLionでプロゞェクトを操䜜できたす。



起動コマンドの匕数蚭定、起動に䜿甚されるツヌルチェヌン、およびその他のオプションは、[蚭定] / [蚭定] | [蚭定]にありたす。ビルド、実行、展開| Makefile



Makefileオプション



Makefileアプリケヌションを実行およびデバッグするには、远加のMakefileアプリケヌション構成を䜜成する必芁がありたす。この堎合、タヌゲットはドロップダりンリストから遞択できたす-CLionは、どのオプションがあるかを教えおくれたす。



Makefileアプリの構成



英語のブログで、CLionでのMakefileプロゞェクトの操䜜に関する詳现情報を芋぀けるこずができたす。たた、短いデモ英語を芖聎するこずをお勧めしたす。





CMakeの最新アップデヌト



統蚈が 瀺すように、珟圚C ++開発者の間で最も人気のある3぀の蚭蚈モデルは、CMake、msbuild、およびMakefileです。そしお、この評䟡を3幎間リヌドし、成長を続けおいるのはCMakeです。そのため、CLionで犁止されおいるCMakeのバヌゞョンを垞に曎新し、CMake自䜓の最新のむノベヌションのサポヌトに取り組んでいたす。今回はバヌゞョンを3.17に曎新し、それに応じお2぀の新しい䟿利なCMake機胜のサポヌトを远加したした。



  • Ninja Multi-Config ( Debug Release) Ninja ( -G "Ninja Multi-Config"). CLion , CMake . UI, .
  • CMakeのプリコンパむルされたヘッダヌはもっず泚目に倀したす。䞀般に、プリコンパむルされたヘッダヌファむルPCHのアむデアは新しいものではなく、コンパむラヌによっお長い間サポヌトされおきたした。CLionもかなり前からPCHを䜿甚しおいたす。これで、PCHのコンパむラフラグを芚えお、独自の方法で特定の各コンパむラにCMakeに枡す必芁はありたせんが、コマンドを䜿甚しおPCHタヌゲット倉数にヘッダヌファむルを远加するだけtarget_precompile_headersです。CLion 2020.2は、これで動䜜できるようになりたした。



    CMake PCH


たた、CMake生成の結果を䜿甚しお、ディレクトリからCLionでCMakeプロゞェクトを開く機胜も泚目に倀したす。これは、Makefileゞェネレヌタヌだけでなく、その他の機胜にも䜿甚できたす。時間を節玄-プロゞェクトでCMakeコマンドを再起動せずに、CLionで既にビルドされたプロゞェクトを開きたす。



C ++ 20



私たちのデヌタ によるず、今幎すでにC ++開発者の12がC ++ 20暙準を䜿甚しおいるこずをご存知ですかそのため、もちろん、CLionの新機胜のサポヌトにも積極的に取り組んでいたす。しかし、最初にCLionの蚀語゚ンゞンで䜕ができるかを思い出したしょう。



そのため、珟時点では2぀ありたす。C++には、それぞれJava / Kotlinに基づく組み蟌みのものず、Clangdに基づくかなり新しいものですCLionを䜿甚しお開発しおいたす。珟圚、すべおの努力がClangdベヌスの゚ンゞンに泚がれおいたす。プロゞェクト党䜓に察するアクションリファクタリングなどはただ実行できたせんが、これは良い芋通しのようです。ここでは、特定の最適化ず遅延した解決のために、そしおもちろんキャッシュの存圚のために、䞍完党で時々遅いJavaベヌスの゚ンゞンが勝ちたす。リファクタリングに必芁な蚘号。



しかし、Clangdには非垞に倧きな利点が1぀ありたす。プロゞェクトがオヌプンであるため、コミュニティ党䜓がClangの最新のC ++暙準をサポヌトするためにそこで取り組んでいたす。もちろん、これは私たちが䜕もする必芁がないこずを意味するものではありたせん-ずにかく、このサポヌトはCLionのニヌズに適合させる必芁がありたす。しかし、これはC ++機胜のサポヌトを最初から䜜成するよりもすでに簡単です。たた、Clangでのサポヌトに基づいお、独自の特定の分析を蚘述したり、いく぀かの特別な機胜を実行したりできたすたずえば、数リリヌス前にConceptsの自動補完を行いたした。



LLVMに付属するClangd゚ンゞンの最新の曎新が、C ++ 20コヌドでより安定しお動䜜するこずを確認したした。䞀般に、組み蟌みの統蚈によれば、Clangd゚ンゞンはより安定しおいたす。そのため、Clangd゚ンゞンを完党に無効にする機胜は蚭定から​​削陀されたした。しかし、蚭定/蚭定に远加|蚀語ずフレヌムワヌク| C / C ++ |私たちの゚ンゞンが構築されおいるリビゞョンに関するClangd情報。これで、C ++のサポヌトず組み蟌みのClang-Tidyの分析の芳点から䜕が期埅できるかがわかりたした。



LLVMリビゞョン



ちなみに、オンラむンヘルプには、 C ++機胜のサポヌトの芳点から2぀の゚ンゞンを比范分析した優れた蚘事がありたす。



そしお今、C ++ 20サポヌトから実際に远加されたものに぀いお



  • C ++ 20個のキヌワヌドのコヌド補完char8_t、consteval、およびconstinit、co_await、co_return、ずco_yield。
  • 指定された初期化子の基本クラスからのフィヌルドの完了



    指定された初期化
  • これで、構成がexplicit(bool)正しく匷調衚瀺され、名前のヒント、ナビゲヌション、およびリファクタリングが機胜したす。



    明瀺的なbool
  • forむニシャラむザを䜿甚した範囲ベヌスのルヌプの堎合、ルヌプ倉数の名前倉曎リファクタリングが機胜したした。




静的コヌドアナラむザヌ



前回のリリヌスでは、最も「重い」分析であるデヌタフロヌ分析をClangdベヌスの゚ンゞンに転送したした。これは䞻にパフォヌマンスを向䞊させるためです。しかし、よくあるこずですが、リファクタリング䞭に、倚くの問題や䞍正確さが芋぀かりたした。そのため、リリヌス2020.2では、この分析を改善し、バグを修正し続けたした。



  • , , .
  • DFA Simplify code Loop condition is never updated. , :



    蚭定を簡玠化する



    , :



    簡玠化する



    - , . , Clang-Tidy (clang-tidy:bugprone-infinite-loop), - . CLion :



    ルヌプ状態
  • CLion (dangling pointers)! (, ), :



    ぶら䞋がりポむンタヌ
  • , Concepts C++20, - auto, :



    関数結果の抂念制玄




このリリヌスでは、我々のナヌザヌの䞀郚でもうずしたが無駄だったみんなのお気に入り怜査ヘクタヌの楜しさを䜜るには゚ディタ領域の右䞊隅にある新しい怜査りィゞェットになっおいたす。これで、バックラむトレベルを蚭定するためのオプションが衚瀺されすべおの問題の衚瀺からコヌドアナラむザヌの完党な無効化たで、クリックするず、このファむルの静的分析結果のりィンドりが開きたす。



怜査りィゞェットず問題ビュヌ



ナニットテスト



ここですでに䜕床も蚀及されおいる調査によるず、C ++開発者の34はナニットテストを䜜成しおいたせん。その芋返りに、圌らは他の方法でテストを行っおいるず私は信じたいず思いたす。問題の䞀郚は、C ++に暙準の蚭蚈モデルたたは暙準の䟝存関係マネヌゞャヌがないこずです。぀たり、プロゞェクトにナニットテストフレヌムワヌクを远加するのは簡単ではありたせん。しかし珟圚、いわゆるヘッダヌのみのフレヌムワヌクが特に人気が高たっおおり、プロゞェクトに簡単に接続できたす。ヘッダヌファむルを远加しお、自分でテストを䜜成しおください。私たちの偎では、IDEで可胜な限り倚くのオプションをサポヌトしようずしおいたす。このリリヌスでは、doctestがGoogle Test、Catch、Boost.Testからセットに远加されたした。ちなみに、少し前にゲストブログを投皿したしたViktorがこのフレヌムワヌクの利点に぀いお語った著者から。



CLionのサポヌトには通垞のものが含たれたす。



  • 自動テスト怜出。
  • テストを実行およびデバッグするための構成の自動䜜成。
  • テスト結果は、さたざたなフィルタリングず順序付けのオプション、およびテスト゜ヌスコヌドぞのワンクリック遷移を備えた特別な組み蟌みりィンドりに出力されたす。
  • ゚ディタヌの巊偎のペむンにある、テストを実行し、最埌に実行されたテストのステヌタスを識別するためのアむコン。


doctest configs



GoogleTestずCatch2のサポヌトも曎新されたした。



  • Catch2のテンプレヌトテストのサポヌトが远加されたした。
  • たた、Google Testの堎合、マクロのサポヌトGTEST_SKIP()。これは、特定の環境などで䞀郚のテストをスキップできるようにする堎合に非垞に圹立ちたす。




匁護士ちなみに、Catch / Catch2フレヌムワヌクの䜜成者によるナニットテストサポヌトの改善に関する簡単な抂芁ビデオ





CTestに関する質問ぞの譊告これは「通垞の」フレヌムワヌクではなく、テストの圢匏で䜕かを実行するための䞀定レベルの抜象化であるため、少し難しくなりたす。しかし、私たちは早くも2020.3でいく぀かの統合を蚈画しおいたす



そしお



最も興味深い、おそらく議論された、残りに぀いお簡単に説明したす。これから始めるべきでしたが、CLion 2020.2には、゚ディタヌのパフォヌマンスに察する倚くの小さいながらも重芁な改善が含たれおおり、゚ディタヌのハングが修正されおいたす。たずえば、そのような改善の1぀は、Enter マクロ定矩内で抌されたずきにバックスラッシュを挿入するこずです。これは線集者の生産性に圹立぀ように思われたすか実際のずころ、新しい行は珟圚のマクロの定矩の䞀郚である可胜性が高く、バックスラッシュを挿入するこずで、倧量のコヌドの䞍必芁な再解析を回避できるため、゚ディタヌの負担を軜枛できたす。



その䞊



  • PlatformIO — , platformio.ini CMake .
  • , IntelliJ . : GitHub Pull Requests Git WSL2 ( WSL2, CLion Git ).
  • 2020.2のデバッガヌに関しおは、蚈画よりも少ない成果を䞊げるこずができたした。基本的に、すべおの倧きなタスクは2020.3にプッシュバックされおいたすrootずしおデバッグ、コアダンプをデバッグ。ただし、このバヌゞョンでは、犁止バヌゞョンのGDBを9.2にアップグレヌドし、GDBSTLプリティプリンタヌも曎新したした。Microsoft Visual C ++ツヌルチェヌン甚のLLDBベヌスのデバッガヌでは、機胜、パフォヌマンス、安定性の䞡方で倚くの改善が行われたした。


それが今日のすべおです。最埌たで読んだこずがありたすかご枅聎ありがずうございたしたそれを詊しお、コメントに質問、提案、感嘆笊を曞いおください-私たちはい぀でもそれらを読んで答えるこずを嬉しく思いたす



CLionチヌム

開発ぞの意欲



All Articles