C++ Builder での CMake の利用

提供: RAD Studio
移動先: 案内検索

CMake コマンドラインのサポート

RAD Studio 10.2 Tokyo Release 3 には、RAD Studio の C++ コンパイラを利用したコマンドライン上での CMake プロジェクトのビルドのサポートが含まれています。Windows に対して、または Windows から他のプラットフォームに対してコンパイルすることができます。 CMake は、RAD Studio の次の Clang 拡張コンパイラをサポートします: BCCAARM for Android、BCCIOSARM64 for 64 ビット iOS、BCCIOSARM for 32 ビット iOS、BCC64 for 64 ビット Windows、BCC32X for 32 ビット Windows。 RAD Studio 10.2 Tokyo Release 3 はまた、Ninja を CMake でサポートしています。これにより、高速な並列コンパイルが可能になります。

CMake と Ninja のインストール

CMake

CMake 3.10 をダウンロードしてインストールします。バイナリ インストーラを使用します。これは、システム パスに CMake をオプションで追加します。インストール時にこのオプションを必ず選択してください。

CMake ファイルは、C:\Program Files (x86)\Embarcadero\Studio\19.0\cmake にあります。しかしながら、ビルド プロセスでのエラーを回避するには、ファイルを 1 つ手動で移動させる必要があります。次のステップに従ってください:

  1. CMake インストレーション フォルダと Modules\Platform サブフォルダを探します。 例: C:\Program Files\CMake\share\cmake-3.10\Modules\Platform
  2. Windows-Embarcadero.cmake ファイルを探し、バックアップを作成します。
  3. Windows-Embarcadero.cmakeStudio\19.0\cmake フォルダからコピーし、CMake フォルダにある方のバージョンを上書きします。

Windows コンパイラに対する内部ビルド CMake のサポートを大幅に拡張したため、ビルドを正常に行うためには、このファイルを使用する必要があります。

Ninja

Ninja 1.8.2 をダウンロードしてインストールします。 これを、手動でシステム パスに追加する必要があります。

CMake の使用方法

CMake は、テキスト ファイル CMakeLists.txt (CMake にビルドするファイルを支持するファイル)をベースに、ビルドを行います。さらなる情報については、開発者用ドキュメントを参照してください。 また、CMake 上にある Jeff Preshing によるブログ シリーズ、「How to Build a CMake-based Project」や「Learn CMake’s Scripting Language in 15 Minutes」もお読みになることをお勧めします。

CMake を使用するには、次のファイルが必要となります:

  • ビルドしたい C++ ソース:多数の C++ ファイルおよびヘッダーです。
  • CMakeLists.txt ファイル: プロジェクト名を定義し、すべてのソース ファイルを検索するために指定し、それらを実行可能ファイル、ライブラリ、パッケージ、その他にビルドします。下記にサンプル ファイルが複数あるので参照してください。さらに上級の CMakeLists.txt ファイルでは、複数のプロジェクトを指定します。
  • (任意)CMake を動かすためのバッチ スクリプト:バッチ スクリプト (*.bat) を使用して数多くのコマンドを格納することができます。CMake は、大量のファイルを作成することができ、バッチ ファイルを使用して、CMake のファイルを含むすべての出力を格納するサブフォルダを作成することができます。「using bcc32c with CMake」上のこのブログ投稿でより詳しく説明しています。
バッチ スクリプトをコマンドラインから実行して、実行可能ファイルを数多くのその他のファイルと共に、指定されたサブフォルダに生成します。

メモ: CMakeLists.txt ファイルは、プロジェクトのルート フォルダに格納してください。ソース ファイルはサブフォルダに格納できます。

CMake を利用したビルド

RAD Studio コマンド プロンプトを[スタート]メニューから開始するか、コマンド プロンプトを開き、RAD Studio の \bin フォルダにある rsvars.bat を実行します。

CMake が、CMakeLists.txt ファイルを検索します。プロジェクトのこれらファイルのいずれかを作成する方法については、以下を参照してください。

Windows の場合

Win32 をターゲットとする場合: cmake -DCMAKE_C_COMPILER=bcc32x.exe -DCMAKE_CXX_COMPILER=bcc32x.exe -G Ninja

Win64 をターゲットとする場合: cmake -DCMAKE_C_COMPILER=bcc64.exe -DCMAKE_CXX_COMPILER=bcc64.exe -G Ninja

その後、 ninja

実際のビルドを行うために Ninja を呼び出すには:

iOS および Android の場合

iOS および Android は、ツールチェーン ファイルによって処理されます(これは、クロスコンパイルに使用されます)。コマンドライン ビルドを行う前に、IDE からビルドおよびデプロイができること(SDK の設定を含む)を確認します。

iOS32 をターゲットとする場合: cmake -DCMAKE_TOOLCHAIN_FILE=bccios32.cmake -G Ninja

iOS64 をターゲットとする場合: cmake -DCMAKE_TOOLCHAIN_FILE=bccios64.cmake -G Ninja

Android をターゲットとする場合: cmake -DCMAKE_TOOLCHAIN_FILE=bccaarm.cmake -G Ninja

その後、 ninja

実際のビルドを行うために Ninja を呼び出すには:

その他のコマンドライン フラグ

  • -G”Borland Makefiles”: 旧スタイルの make をビルドに使用する際
  • -DCMAKE_BUILD_TYPE_INIT=Release: デバッグ ビルドまたはリリース ビルドをターゲットとする際
  • -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON: デバッグ出力を簡単にするため
  • --debug-output: CMake をデバッグ モードにするため

例:

cmake -DCMAKE_C_COMPILER=bcc32x.exe -DCMAKE_CXX_COMPILER=bcc32x.exe -DCMAKE_BUILD_TYPE_INIT=Release -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -G "Borland Makefiles" --debug-output -v ..

Win32 コンパイラ、リリース ビルド、その他詳細出力またはデバッグ フラグを使用するには、親フォルダ内に配置された CMakeLists.txt で、make を使用してビルドします。

CMakeLists.txt における C++ Builder 固有のサポート

ターゲット

CMake を使用して、実行可能ファイル、DLL、静的ライブラリ、パッケージを作成することができます。

set_embt_target(FMX)
set_embt_target(VCL)
set_embt_target(Package)
set_embt_target(DynamicRuntime)

または、組み合わせることもできます:

set_embt_target(VCL DynamicRuntime)

マクロと変数

iOS と Android には、数多くの マクロと変数があります。このサンプル CMakeLists.txt は、そのいくつかを表しています:

cmake_minimum_required(VERSION 3.9)
set(APP "FMXApp")
set(CMAKE_BUILD_TYPE "DEBUG")
set(EMBT_PROJECT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/Project_${APP}")
project (${APP})

if(EMBT_TARGET STREQUAL iOS64)
    set(EMBT_IOS_BUNDLE_IDENTIFIER "com.company.adhoc")
    set(EMBT_IOS_BUNDLE_EXECUTABLE ${APP})
    set(EMBT_IOS_BUNDLE_NAME ${APP})
    set(EMBT_IOS_BUNDLE_VERSION "1.0")
    set(EMBT_IOS_BUILD_TYPE "Ad-hoc")
    add_embt_background_modes(audio)
    add_embt_background_modes(voip)
    add_embt_additional_files("${CMAKE_CURRENT_SOURCE_DIR}/cmakelists.txt")
    add_embt_additional_files("${CMAKE_CURRENT_SOURCE_DIR}/cmakelists.txt" "${EMBT_PROJECT_LOCATION}" "new.txt")
    set(EMBT_IOS_CAMERA_USAGE_DESCRIPTION "This app needs access to your camera")
    set_embt_device_family(iphone)
    set(EMBT_IOS_MINIMUM_OS_VERSION 8.0)
    set(EMBT_IOS_BUNDLE_ALLOW_MIXED_LOCALIZATIONS YES)
    set(REMOTE_PROFILE "_mac")
    set(PROVISIONING_PROFILE "provision.mobileprovision")  
    set(CERTIFICATE "iPhone Distribution:")
elseif(EMBT_TARGET STREQUAL iOS32)
    set(EMBT_IOS_BUNDLE_EXECUTABLE ${APP})
    set(EMBT_IOS_BUNDLE_NAME ${APP})
    set(EMBT_IOS_BUNDLE_IDENTIFIER "com.company.id")
    set(EMBT_IOS_BUNDLE_VERSION "1.0")
    set(EMBT_IOS_MINIMUM_OS_VERSION 8.0)
    add_embt_background_modes(audio)
elseif(EMBT_TARGET STREQUAL Android)
    set(EMBT_ANDROID_BUILD_TYPE "Development")
    add_embt_additional_files("${CMAKE_CURRENT_SOURCE_DIR}/cmakelists.txt")
    add_embt_additional_files("${CMAKE_CURRENT_SOURCE_DIR}/cmakelists.txt" "${EMBT_PROJECT_LOCATION}" "new.txt")
    #set(EMBT_ANDROID_SPLASH_IMAGE_LARGE "c:/myArtwork/Android/FM_SplashImage_640x480.png")
    set(EMBT_ANDROID_INCLUDE_SPLASH_IMAGE True)
    set(EMBT_ANDROID_ALIAS "release-keystore")
    set(EMBT_ANDROID_KEYSTORE "release.jks")
    set(EMBT_ANDROID_STOREPASS "cmakeandroid")
    set(EMBT_ANDROID_KEYPASS "cmakeandroid")
endif()

# Create a sources variable with a link to all cpp files to compile
file(GLOB SOURCES
    "src/*.h"
    "src/*.cpp"
)
set_embt_target("FMX")
if(EMBT_TARGET STREQUAL Windows)
    add_executable (${APP} WIN32 ${SOURCES})
    install(TARGETS ${APP} RUNTIME DESTINATION bin)
else()
    add_fmx_app("${SOURCES}")
endif()

CMakeLists.txt ファイルの例

Example という名のプロジェクトで、ソース ファイルが同じフォルダにある場合、もっとも最小の CMakeLists.txt ファイルは次のようになります:

cmake_minimum_required (VERSION 3.10)
project (Example)

file(GLOB Example_SRC
   "*.h"
   "*.cpp"
)

add_executable(Example ${Example_SRC})

これは最低バージョン(3.10)、プロジェクト名を示し、利用可能な .cpp と .h のファイルをすべて使用し、それらをすべて Example.exe にコンパイルします。

すべてのファイルを一緒に “Glob”する(ワイルドカードで指定する)ことは、迅速かつ簡単ですが、推奨される最良の方法ではありません。代わりに、使用したいファイルを指定するほうが推奨されます。.cpp のファイル群やヘッダー群を指定することができますが、.cpp ファイルを指定する最小例は次のようになります:

cmake_minimum_required (VERSION 3.10)
project (Example)

add_executable(Example main.cpp foo.cpp bar.cpp)

サンプル CMakeLists.txt: VCL アプリケーション

cmake_minimum_required(VERSION 3.9)
project (VCLApp)
set_embt_target(VCL DynamicRuntime)
add_executable (VCLApp WIN32 src/VCLApplication.cpp src/Project1.cpp)
install(TARGETS VCLApp
            RUNTIME DESTINATION bin
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib/static
)

サンプル CMakeLists.txt: FMX アプリケーション

cmake_minimum_required(VERSION 3.9)
project (FMXApp)
set_embt_target(FMX)
add_executable (FMXApp WIN32 src/FMXSample.cpp src/FMXProj.cpp)
install(TARGETS FMXApp RUNTIME DESTINATION bin)

サンプル CMakeLists.txt: 共有ライブラリ

project(SharedLibrary)

set(SharedLibrary_headers SharedLibrary.h)
set(SharedLibrary_sources SharedLibrary.cpp)

add_library(SharedLibrary SHARED SharedLibrary.h SharedLibrary.cpp)

install(TARGETS     SharedLibrary 
                    RUNTIME DESTINATION bin
                    LIBRARY DESTINATION lib
                    ARCHIVE DESTINATION lib/static
       )

サンプル CMakeLists.txt: 静的ライブラリ

project(StaticLibrary)

set(StaticLibrary_headers StaticLibrary.h)
set(StaticLibrary_sources StaticLibrary.cpp)

add_library(StaticLibrary STATIC StaticLibrary.h StaticLibrary.cpp)
install(TARGETS     StaticLibrary
                    RUNTIME DESTINATION bin
                    LIBRARY DESTINATION lib
                    ARCHIVE DESTINATION lib/static
       )

サンプル CMakeLists.txt: パッケージ

cmake_minimum_required(VERSION 3.9)

project (PackageExample)
set_embt_target(Package)
add_library(PackageExample SHARED PackageExample.cpp)

install(TARGETS     PackageExample
                    RUNTIME DESTINATION bin
                    LIBRARY DESTINATION lib
                    ARCHIVE DESTINATION lib/static
       )

サンプル CMakeLists.txt: リソース

cmake_minimum_required(VERSION 3.9)

project (myapp)
set(SYSTEM_SOURCES ${SYSTEM_SOURCES} myapp.rc ) 
set(StrTableRes_SRCS resource.h myapp.cpp)
ADD_EXECUTABLE(myapp WIN32 ${SYSTEM_SOURCES} ${StrTableRes_SRCS} )

関連項目