RAD Studio 10.4.1 is now available! Learn more. Looking for discounts? Visit our Special Offers page!
C++

10.2.3 最新版の CMakeサポート

Author: h.mohri

この記事は、DAVID MILLINGTONによるNew in 10.2.3: CMake Supportの抄訳です。

 C++Builder 10.2.3新機能、CMakeをコンパイラで使用するためのサポートです

この投稿はCMakeのシリーズ第1弾は、次の内容を解説しています:

  • CMakeとは
  • CMakeLists.txtファイルを書き込む方法
  • Windowsでプロジェクトをビルドする方法

CMakeとは

CMakeは、C++アプリケーションやライブラリのためのプラットフォームやコンパイラに依存しない、プロジェクト形式と考えることができます。

CMakeCMakeLists.txtというテキストファイルを使用しますので、編集可能です。その内容はビルドする必要のあるファイルやプロジェクト名、依存関係などです。次に例を示します。

cmake_minimum_required (VERSION 3.10)
project (MyProjectName)

add_executable(MyProjectName one.cpp two.cpp three.cpp)

上記内容説明

  • このファイルはCMake3.10(that’s ten not one)以上で動作します
  • MyProjectNameと言うプロジェクトです
  • MyProjectName.exeは、one.cpp, two.cpp, およびthree.cppでビルドします

これはシンプルな例ですが、CMakeLists.txtファイルは、プロジェクトよりもC++Builderのプロジェクトグループに似ています。なぜなら、複数のプロジェクト、それらの間の依存関係などを指定できるからです。

CMakeはコンパイラ依存しないので、 ”cc on Solaris”, “gcc on Linux”, “clang on Mac”などビルドする方法にも対応できます。しかしそのためにはベンダーやプラットフォーム固有の設定を行う必要はあります。たとえば、C++Builderに特有のVCLまたはFMXランタイムとのリンクを指定する、またはダイナミックランタイムにリンクするなど、他のコンパイラと同等の機能を持ちますが、インプリメンテーションではまだ固有のものです。

CMakeは良いドキュメントを持っていますが、CMakeを知らないと少し不透明な部分があります。なので、個人的にはJeff Pershing's blog series on CMake
How to Build a CMake-Based Projectと Learn CMake's Scripting Language in 15 を読むことをおすすめ致します。そこにはCMakeのエキスパートになるような説明が豊富にあります。

C++BuilderCMakeサポートしたことのメリット

多くのサードパーティ、オープンソースのC++ライブラリは、CMakeプロジェクトとしてパッケージ化されています。 これらを使用するために、C++Builderプロジェクトを手動作業で作成する必要がありました。CMakeをサポートしたことで、すぐにコマンドラインでビルドすることができます。

これにより、プロジェクトで他の共通ライブラリを使用するのがはるかに容易になります。

もう1つは、CMakeNinjaを使用することをサポートしていることです。 これにより、並列構築が可能になります。 私たちはすでにC++Builderでの並列コンパイルをサポートしていますが、Ninjaについては後のブログ記事で説明します。

なにを追加したのか?

弊社では次のような追加しました。CMakeを使ってC++Builder Clangベースのコマンドラインコンパイラ(Win32、Win64、iOS32、iOS64、およびAndroid用)すべてのビルドをサポート。DocWiki C++BuilderでのCMakeの利用

(classic compilerではすでにCMake利用可能です)

WindowsでのCMake使用

インストール

  1. CMakeをダウンロードしてインストールします。 インストール時に、CMakeをシステムパスに追加するオプションを選択してください。 そうしない場合は、CMakeを使用するたびにそのフルパスを指定する必要があります。
  2. オプション強くお勧めしますが、Ninjaをダウンロードしてください。 これは単純なEXEです:あなたのシステムのどこかに配置し、その場所を手動でシステムパスに追加してください。
  3. C++Builder 10.2.3をインストール
  4. 非常に重要なインストール手順が1つあります。 これを見逃したり、奇妙なエラーメッセージが表示されたりすることはありません。 “Windows-Embarcadero.cmake”ファイルは、現在CMakeに同梱されているバージョンと比較して更新されています。 その後C:\Program Files (x86)\Embarcadero\Studio\19.0\cmake\Windows-Embarcadero.cmake をコピーして貼り付けます: C:\Program Files\CMake\share\cmake-3.11\Modules\Platform (3.11はCMake版です)ファイルを最初にバックアップしてください。

この最後のステップをやっていないと、CMakeを実行するときに紛らわしいエラーメッセージが表示されます。

-- Check for working C compiler: C:/Program Files (x86)/Embarcadero/Studio/19.0/bin/bcc64.exe -- broken

CMake Error at C:/Program Files/CMake/share/cmake-3.11/Modules/CMakeTestCCompiler.cmake:52 (message):

  The C compiler
    "C:/Program Files (x86)/Embarcadero/Studio/19.0/bin/bcc64.exe"
  is not able to compile a simple test program.

  It fails with the following output:
    [ -- Long compiler command line omitted -- ]

    error: invalid integral value 'd' in '-Od'

  CMake will not be able to correctly generate this project.

上記が表示される場合は、Windows-Embarcadero.cmakeをコピーしてください。 おそらく10.3で、更新された設定ファイルを出荷することなくCMakeをすぐにサポートできる予定です。

例 Windows CMakeLists.txt

非常にシンプルなCMakeLists.txtを示し、そのコンセプトを実証しました。 実際のプロジェクトのためのものを見てみましょう。 これは、昨年CodeRage用に作成したFireMonkey Windowsアプリケーション用です。

cmake_minimum_required (VERSION 3.10)
project (Mazes)

set_embt_target("FMX" "DynamicRuntime")

add_executable(Mazes CppMazes.cpp Algorithms.cpp Cell.cpp DistanceDijkstra.cpp
    Grid.cpp MainForm.cpp)

非常によく似ていますね。 Embarcadero固有の行、set_embt_targetが追加されています。 このマクロは、VCLまたはFMX、ダイナミックランタイム、またはパッケージとしてリンクするかどうかを指定します。 これらは組み合わせることができ、当社のマニュアルに記載されています。

VCLアプリケーションを構築する場合は、

set_embt_target(VCL)

動的ランタイムとリンクしていない(指定されていないため)が、VCLとリンクしています。

通常のCMakeプロジェクトでは、add_executable呼び出しでWIN32を指定する必要があります。これは、コンソールアプリケーションではないことを指定します(つまり、PEフラグを設定してWinMainを使用します)。VCLまたはFMXを指定した場合、 この; 私たちは自動的に行います。 それを無効にして、必要に応じてコンソールを指定することができます。

共有ライブラリやパッケージを作成する方法、または共有ライブラリを作成する方法をもっと探したい場合? ドキュメントには、6つのサンプルCMakeLists.txtファイルがあります。

ビルド Windows

知る必要がある2つのコマンドライン
ビルドは非常にシンプルです。

CMakeをインストールしてあり、CMakeLists.txtファイルを用意します。
cmakeを呼び出して、bcc64またはbcc32xをC/C++コンパイラとして使用することを指定します。
CMakeは自動的にCMakeLists.txtファイルを探し、指定したコンパイラに基づいてWin32かWin64かどうかを判断します。

cmake -DCMAKE_C_COMPILER=bcc32x.exe -DCMAKE_CXX_COMPILER=bcc32x.exe -G Ninja

もしくは

cmake -DCMAKE_C_COMPILER=bcc64.exe -DCMAKE_CXX_COMPILER=bcc64.exe -G Ninja 

これはCMakeを実行し、Ninjaジェネレータを使用します。つまり、Ninjaが構築する必要があるファイルを生成します。他のポストでNinjaや他のジェネレータを使用する場合、このプロセスは一度だけ実行する必要があります。
新しいファイルを追加するなど、プロジェクトが変更されたときに更新プログラムを再度実行して更新することができます。一度だけですので、ビルドするたびに実行する必要はありません。

ビルド時にNinjaをコールする。

ninja

すごくシンプルです。少しの間ninjaビルドが表示された後、ベースフォルダ内に実行ファイルが出来上がります。

関連

 

[次回予告] CMake for iOS and Androidを使う

iOSとAndroidをターゲット設定する詳細を次回投稿します。

概要

CMakeの使用は実際はとても簡単です。 それをインストールし、CMakeLists.txtファイルがあることを確認し、cmakeを呼び出します。 その後、ninjaで構築します。

これにより、サードパーティのC++ライブラリを簡単に構築できます:cmakeをダウンロードして実行してください。CMakeLists.txtファイルを作成すると、独自のプロジェクトを構築できます。これにより、他のC++ライブラリやコードを使用するのが本当に簡単になるだけでなく、Ninjaなどのジェネレータを使用すると他の利点もあります(たとえば、速度など)。互換性があり、より幅広いC++世界とうまく統合できることは、弊社では他の場所からライブラリやコードを簡単に使用できるようにし、人々がC++Builderを使いやすいようにします。

10.2.3の新機能についての記事URL


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

Deep Dive Webinar: Boost C++Builder Compile Speed with TwineCompile
Related posts
C++Delphi

Get Free Responsive Cross-Platform Login Screen Templates For Android And iOS

C++CodeDelphi

Learn To Build A Python GUI For Working With The Numpy Library In A Delphi Windows App

C++Code

Learn About Using Right Angle Brackets In This C++11 Feature For Windows Development

C++DelphiRAD Studio

Learn How To Use WinRT In Your Native Windows Delphi And C++ Builder Apps

Leave a Reply

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

IN THE ARTICLES