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)
上記内容説明
- このファイルは
CMake
3.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
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition