Author: h.mohri
|
この記事は、DAVID MILLINGTONによるNew in 10.2.3: CMake Supportの抄訳です。 |
C++Builder 10.2.3新機能、CMakeをコンパイラで使用するためのサポートです
この投稿はCMakeのシリーズ第1弾は、次の内容を解説しています:
CMakeとはCMakeLists.txtファイルを書き込む方法- Windowsでプロジェクトをビルドする方法
Table of Contents
CMakeとは
CMakeは、C++アプリケーションやライブラリのためのプラットフォームやコンパイラに依存しない、プロジェクト形式と考えることができます。
CMakeはCMakeLists.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++BuilderがCMakeサポートしたことのメリット
多くのサードパーティ、オープンソースのC++ライブラリは、CMakeプロジェクトとしてパッケージ化されています。 これらを使用するために、C++Builderプロジェクトを手動作業で作成する必要がありました。CMakeをサポートしたことで、すぐにコマンドラインでビルドすることができます。
これにより、プロジェクトで他の共通ライブラリを使用するのがはるかに容易になります。
もう1つは、CMakeでNinjaを使用することをサポートしていることです。 これにより、並列構築が可能になります。 私たちはすでにC++Builderでの並列コンパイルをサポートしていますが、Ninjaについては後のブログ記事で説明します。
なにを追加したのか?
弊社では次のような追加しました。CMakeを使ってC++Builder Clangベースのコマンドラインコンパイラ(Win32、Win64、iOS32、iOS64、およびAndroid用)すべてのビルドをサポート。DocWiki C++BuilderでのCMakeの利用
(classic compilerではすでにCMake利用可能です)
WindowsでのCMake使用
インストール
CMakeをダウンロードしてインストールします。 インストール時に、CMakeをシステムパスに追加するオプションを選択してください。 そうしない場合は、CMakeを使用するたびにそのフルパスを指定する必要があります。- オプション強くお勧めしますが、Ninjaをダウンロードしてください。 これは単純なEXEです:あなたのシステムのどこかに配置し、その場所を手動でシステムパスに追加してください。
- C++Builder 10.2.3をインストール
- 非常に重要なインストール手順が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.
Free Delphi Community Edition Free C++Builder Community Edition






