Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++RAD Studioニュース

C++Builder 12.2 の優れた CMake サポート

cmake-banner

C++BuilderとRAD Studio 12.2 は、C++ に素晴らしい機能をもたらしており、新しい Win64 モダンツールチェーンの CMake を完全にサポートしています。

CMakeは、GetItで今すぐ入手可能で、素晴らしいデモもいくつか用意されています。VCLアプリ、FMXアプリ、パッケージ、DLL、コンソールアプリなど、ご期待通りにプロジェクトがビルドできますが、それだけではありません。これはC++Builderの新しいツールチェーンのパワーと互換性、そして品質を示すもので、OpenCVさえビルドできます。実際、デモの1つとしてOpenCVも含まれています。

OpenCVに関してはお客様からエンバカデロへ問い合わせも多いため、ようやくこのブログでご紹介できることにとても喜びを感じています。

12-2-cmake-opencv-files
CMakeとC++Builder 12.2でビルドされたOpenCVファイルの一部をWindowsエクスプローラで表示

まずは新しいCMakeのサポートと使用方法について詳しく説明しますが、すぐにCMakeのデモを始めたい場合は、クイックスタートに直接進んでください。

CMakeで何ができるのか?

CMakeは、複数のプラットフォームやコンパイラに対応したC++向けの非常に人気の高いビルドシステムです。ライブラリの作成者は、プロジェクト、ソース、設定を記述したCMakeLists.txtファイルを作成します。そして、(理論上は)誰でも同じスクリプトを使用して、任意のコンパイラでそのプロジェクトをビルドすることができます。

開発者としてよくあるのは、Githubでライブラリを見つけ、CMakeLists.txtが添付されていることが多く、自分が使用しているツールチェーン(エンバカデロの場合はC++Builder)で実行できるようにしたいと思うでしょう。C++Builderをこれらのツールチェーンの一つとして有効にすることが、エンバカデロでの12.2リリースにおける重要な目標であり、ようやくその目標は達成できたと考えています。

サードパーティのC++ライブラリのほとんどはCMakeビルドスクリプトが付属しており、このサポートにより簡単にビルドできるようになります。

つまり、CMakeがC++Builderをサポートしているため、C++ライブラリを簡単に利用できます。

現在では、300万個以上のサードパーティのC++ライブラリがここにあります。

技術詳細: CMake + ninja

CMakeはメタビルドシステムです。プロジェクトを一度記述すれば、CMakeを使用してmakefileなどのさまざまなビルドスクリプトを生成できます。つまり、CMakeは実際にビルドを行うわけではありません。別のビルドシステム用のファイルを作成します。エンバカデロがサポートするシナリオは、高速な並列ビルドの世界標準であるninjaを使用することです。ただし、残念ながらTwineCompileや12.2に組み込まれたデフォルトの並列ビルドほど高速ではありません。TwineCompileや12.2のデフォルトの並列ビルドは、エンバカデロのツールチェーンに高度に特化しており、エンバカデロの測定結果では、状況によっては他社を大きく上回ることも示されています。ただし、ninjaはC++Builderエコシステム以外の環境では最良の選択肢です。

そのため、エンバカデロではCMakeとninjaの組み合わせをサポートしており、CMakeを使用してC++ライブラリをビルドし、高速な並列処理が可能なninjaビルドランナーを介してビルドを実行することができます。

12-2-cmake-in-getit

GetItで提供しているCMake はエンバカデロのカスタムビルドであり、エンバカデロでカスタムした変更箇所は CMakeプロジェクトへフィードバックする予定です。 CMakeは[ツール] >[ GetIt パッケージマネージャ]からインストールできます。 Ninja は 単一の実行ファイルとしてダウンロードでき、任意のシステムパスに追加するだけで使用できます。 これら両方をダウンロードしてインストールしてください。

クイックスタート

GitHub上のRAD Studio 12のデモは、CMake を使用した一連の例とともに 1 日前に更新されました。お気に入りの Git クライアントを使用して、こちらをチェックするか、コピーをダウンロードしてください。

セットアップの手順は、以下の通りです。

  1. GetItからCMakeをインストールしてください。(IDEで、ツール > GetItパッケージマネージャーの順に選択し、検索ボックスにCmakeと入力してEnterキーを押し、インストールをクリック)。
  2. ninjaをダウンロードしてインストールしてください。(これは単一のEXEファイルです。システムパスで検出される場所に配置してください)。
  3. また、gitのコピーもシステムパス上のどこかにインストールされていることを確認してください。
  4. OpenCVをビルドする場合は、Pythonのコピーもシステムパス上にインストールされている必要があります。

デモスクリプトは、これらを使用して自動的にさまざまなオープンソースプロジェクトから取得し、お客様側で手動による設定を必要とせずにビルドできます。これは、まさに「実行するだけで動作を確認できる」デモセットです。

続いて

  1. スタートメニューからすべてのアプリ > [Embarcadero RAD Studio 12] > [RAD Studio コマンドプロンプトt (x64)]を開きます。
  2. デモをダウンロードした場所に移動し、cd “<RADStudio12DemosCPPCMakeへのパス>” (例: C:¥RADStudio12Demos-main¥RADStudio12Demos-main¥CPP¥CMake)
  3. make-*.batファイルのいずれかを実行します。
12-2-cmake-rad-studio-command-prompt
RAD Studioのコマンドプロンプトはどこにある?
12-2-cmake-demos-folder
すべての CMake デモ スクリプトは Github から入手できます。1 つ実行してください。(完了しても閉じないように、コマンド プロンプトから実行することをお勧めします。)

デモ

「デモセット」には、様々なソフトウェアのデモが組み込まれており、その内容は以下の通りです。

  1. make-vcl.bat: 基本的な VCL アプリケーションをビルド
  2. make-fmx.bat: 基本的な FireMonkey アプリケーションをビルド
  3. make-console.bat: シンプルなコンソールアプリケーション
  4. make-package.bat: パッケージをビルド(これはすべて 基本的な CMake サポート以上の機能があることをデモするためのものです。C++Builder による方法も完全にサポートしました)。次に、サードパーティライブラリに取り組みます。これらの各ライブラリは、githubのリポジトリから自動的に最新バージョンを取得し、CMakeとninjaを使用してビルドします。ユーザーは、スクリプトを実行するだけで、他に何もする必要はありません。
  5. make-ninja.bat: これはビルドに使用しているのと同じ ninja 実行ファイルをビルドします。C++Builder Cmake builder を CMake builder でビルドして、CMake builder を C++Builder でビルドした新しい C++Builder builder に置き換えることができます。あるいは、別の言い方をすれば、ninjaをビルドするにはninjaが必要ですが、一度ビルドすれば、必要であればこれに置き換えることができます。なぜかというと、Ninja のビルドは、エンバカデロがサポートする幅広い機能と互換性をデモするためにあります。既に使用しているまったく同じツールを再ビルドしてみましょう。
  6. make-brotli.bat: BrotliはGoogleの一般的な圧縮ライブラリで、WebサーバーやCDNでよく使用されています。ここでも、必要に応じてアプリケーションに追加できるランダムで幅広い機能の一例をデモしています。
  7. make-drogon.bat: Drogonは高速な最新のC++17 Webサーバーです。これは、C++Builderを念頭に置いて作成されていないサードパーティライブラリにおける最新のC++の素晴らしい実例であり、動作します。これにはいくつかの依存関係 (Brotli と JSONCPP) があるため、最初にこれらをビルドします。
  8. make-googletest.bat: Google Testをビルドします。これは一般的なC++のユニットテストフレームワークです。
  9. make-jsoncpp.bat: 一般的なC++のJSONのパースおよびシリアライズライブラリをビルドします。
  10. make-libsimdpp.bat: これは、クロスプラットフォームでベクトル化プリミティブを使用するための素晴らしいライブラリです。通常のC++よりも少し複雑ですが、アセンブリ言語よりも高いレベルで、パフォーマンスの高いコードを書くのに最適です。ぜひお試しください。余談ですが、エンバカデロはここにパッチを適用しています。この適用は必須ではなく、追加機能をサポートしているために選択したためです。
  11. make-opencv.bat: このコンピュータビジョンライブラリは、お客様から最もリクエストの多いライブラリの 1 つなので、デモとして完全にビルドしたものを含めてみてはいかがでしょうか。
  12. make-vtk.bat: これは科学的な視覚化と画像処理のための広く使用されているライブラリです。OpenCVの前提条件となるため、自動的にビルドされます これは互換性パッチを必要とする唯一のライブラリであり、workaroundsvtk-v9.3.1.diffで確認できるとおり、コンパイラによって定義されている BORLANDC のチェックを変更して、Clang が v15 より新しいかどうかもチェックし、実際にサポートしているいくつかの型を定義していることがわかります。つまり、「このコンパイラで処理できるので問題ありません」ということです。
12-2-cmake-building

技術詳細: ビルド

OpenCVとVTKの組み合わせには、並列処理を行っても数時間かかる可能性があります。これらは巨大なプロジェクトであり、何千もの複雑なC++ファイルが存在するからです。Ninjaは、利用可能なコアの数だけ使用します。

12-2-cmake-many-compilers
ninjaの影響により、タスクマネージャにbcc64xの多数のコピーが表示されます

したがって、デフォルトでオンになっている新しい並列ビルドと同様に、開発者マシンに搭載するコアの数が多いほど、コンパイルが高速化されます。

CMake が動作する仕組みの詳細については、また改めてブログで紹介する予定です。デモ用のスクリプトは非常に簡単ですが、実際よりも複雑に見えます。実際には、xbcc64x、x86_64、リリース、入力フォルダーと出力フォルダーなどを指定する変数をいくつか設定して実行します。各スクリプトを数行にまとめることができます。

より技術的な投稿を近日中に公開しますので、お楽しみに!

CMakeサポート

C++Builder 12.2 は、以下の3つの主要なリリースの柱を目指しました。

  1. Delphiで作成されたものを含む動的パッケージをサポートし、C++でそれらをビルド
  2. 高速でCPUを飽和させるマルチコアコンパイル (これについては近日中にブログで紹介します)
  3. CMakeのサポート

エンバカデロは、C++Builder 12.2で上記 3つすべての目標を達成できました。

そして、これら3つすべてについて説明すると、1つ目は12.2の新Win64ツールチェーンは、旧Win64ツールチェーンの全て機能が揃った完全なものであり、はるかに優れた代替品です。

2つ目は、生産性を高めるために高速なコンパイルを行うことを目的としています。コンピュータが提供するすべてのものを使用します。コア数とソースコードの数が多いほど、スケーリングが向上します。つまり、投入するすべてのものが多ければ多いほど、パフォーマンスが向上します。

そして3つ目のCMakeは、業界標準の C++ ビルド システムの使用を非常に簡単にします。C++Builderの互換性を考慮すると、必要なサードパーティのC++ソースを本当に簡単に利用できます。もちろん、OpenCV のような非常に複雑で大規模なライブラリも含まれます。

RAD Studio 13.2 Florence Now Available! Kai 1.1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES