Utilisation de CMake avec C++ Builder
Sommaire
- 1 Prise en charge de la ligne de commande CMake
- 2 Installation de CMake et Ninja
- 3 Comment utiliser CMake
- 4 Construction en utilisant CMake
- 5 Prise en charge spécifique de C++ Builder dans un fichier CMakeLists.txt
- 6 Fichier CMakeLists.txt exemple
- 6.1 Fichier CMakeLists.txt exemple : Application VCL
- 6.2 Fichier CMakeLists.txt exemple : Appplication FMX
- 6.3 Fichier CMakeLists.txt exemple : Bibliothèque partagée
- 6.4 Fichier CMakeLists.txt exemple : Bibliothèque statique
- 6.5 Fichier CMakeLists.txt exemple : Package
- 6.6 Fichier CMakeLists.txt exemple : Ressources
- 7 Voir aussi
Prise en charge de la ligne de commande CMake
RAD Studio 10.2 Tokyo Release 3 inclut une prise en charge de la construction de projets CMake sur la ligne de commande à l'aide des compilateurs C++ de RAD Studio. Vous pouvez compiler pour Windows ou pour d'autres plates-formes que Windows. CMake prend en charge les compilateurs améliorés par Clang de RAD Studio : BCCAARM pour Android, BCCIOSARM64 pour iOS 64 bits, BCCIOSARM pour iOS 32 bits, BCC64 pour Windows 64 bits et BCC32X pour Windows 32 bits. RAD Studio 10.2 Tokyo Release 3 prend aussi en charge Ninja avec CMake. Cela permet de réaliser rapidement des compilations en parallèle.
Installation de CMake et Ninja
CMake
Téléchargez et installez CMake 3.10. Utilisez l'installateur binaire, car il peut optionnellement ajouter CMake au chemin système. Assurez-vous que vous sélectionnez cette option lors de l'installation.
Les fichiers CMake se trouvent dans C:\Program Files (x86)\Embarcadero\Studio\19.0\cmake
. Toutefois, pour éviter des erreurs dans le processus de construction, vous devez déplacer un fichier manuellement. Pour cela, suivez les étapes ci-après :
- Localisez votre dossier d'installation CMake et le sous-dossier Modules\Platform, par exemple
C:\Program Files\CMake\share\cmake-3.10\Modules\Platform
- Localisez le fichier
Windows-Embarcadero.cmake
et sauvegardez-le. - Copiez
Windows-Embarcadero.cmake
depuis le dossierStudio\19.0\cmake
et écrasez la version figurant dans le dossier CMake.
La prise en charge de CMake a été largement étendue pour les compilateurs Windows. Vous devez utiliser ce fichier pour que la construction puisse s'effectuer avec succès.
Ninja
Téléchargez et installez Ninja 1.8.2. Vous devrez l'ajouter manuellement au chemin système.
Comment utiliser CMake
CMake réalise des constructions à partir d'un fichier texte appelé CMakeLists.txt qui indique à CMake quels fichiers construire. Vous trouverez plus d'informations dans la documentation développeur (EN). Nous vous recommandons également les articles de blog de Jeff Preshing sur CMake : How to Build a CMake-based Project et Learn CMake’s Scripting Language in 15 Minutes.
Pour utiliser CMake, vous avez besoin des fichiers suivants :
- Le source C++ que vous voulez construire : un nombre de fichiers C++ et d'en-têtes.
- Le fichier CMakeLists.txt : Définit le nom du projet, lui indique de trouver les fichiers source et de les construire dans un exécutable, une bibliothèque, un package, etc. Voir ci-dessous pour des fichiers exemples. Des fichiers CMakeLists.txt plus avancés spécifient plusieurs projets.
- (Facultativement) Script du batch pour lancer CMake : Utilisez le script du batch (*.bat) pour définir un certain nombre de commandes. CMake peut créer un grand nombre de fichiers, et vous pouvez utiliser le fichier batch pour créer un sous-répertoire dans lequel toutes les sorties incluant les fichiers CMake sont placées. Cet article de blog sur l'utilisation de bcc32c avec CMake contient plus de détails.
- Exécutez le script du batch depuis la ligne de commande pour générer le fichier exécutable ainsi que d'autres fichiers dans le sous-dossier spécifié.
Remarque : Stockez le fichier CMakeLists.txt dans le répertoire racine de votre projet. Vous pouvez stocker les fichiers sources dans un sous-dossier.
Construction en utilisant CMake
Lancez l'invite de commande RAD Studio depuis le menu Démarrer ou en ouvrant une invite de commande et en exécutant rsvars.bat dans le dossier RAD Studio \bin.
CMake recherche un fichier CMakeLists.txt. Voir ci-dessous pour plus d'informations sur la création de l'un de ces fichiers pour un projet.
Ciblage de Windows
Pour cibler Win32 :
cmake -DCMAKE_C_COMPILER=bcc32x.exe -DCMAKE_CXX_COMPILER=bcc32x.exe -G Ninja
Pour cibler Win64 :
cmake -DCMAKE_C_COMPILER=bcc64.exe -DCMAKE_CXX_COMPILER=bcc64.exe -G Ninja
Ensuite,
ninja
Pour invoquer Ninja en vue de construire le build actuel.
Ciblage d'iOS et Android
iOS et Android sont gérés par l'intermédiaire des fichiers toolchain qui sont utilisés pour la compilation croisée. Assurez-vous que vous pouvez construire et déployer depuis l'EDI (y compris la configuration du SDK) avant de lancer un build par la ligne de commande.
Pour cibler iOS32 :
cmake -DCMAKE_TOOLCHAIN_FILE=bccios32.cmake -G Ninja
Pour cibler iOS64 :
cmake -DCMAKE_TOOLCHAIN_FILE=bccios64.cmake -G Ninja
Pour cibler Android :
cmake -DCMAKE_TOOLCHAIN_FILE=bccaarm.cmake -G Ninja
Ensuite,
ninja
Pour invoquer Ninja en vue de construire le build actuel.
Autres indicateurs de la ligne de commande
- -G”Borland Makefiles” pour utiliser la méthode de construction traditionnelle.
- -DCMAKE_BUILD_TYPE_INIT=Release de débogage ou construction de distribution (release build).
- -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON pour faciliter la sortie du débogage.
- --debug-output pour placer CMake en mode débogage.
Par exemple :
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 ..
Permet d'utiliser le compilateur Win32, les builds de distribution, les indicateurs de débogage ou du mode commentaire, et aussi de construire avec make en utilisant le fichier CMakeLists.txt situé dans le dossier parent.
Prise en charge spécifique de C++ Builder dans un fichier CMakeLists.txt
Cibles
En utilisant CMake, vous pouvez créer des exécutables, des DLL, des bibliothèques statiques et des packages.
set_embt_target(FMX) set_embt_target(VCL) set_embt_target(Package) set_embt_target(DynamicRuntime)
Ou des combinaisons :
set_embt_target(VCL DynamicRuntime)
Macros et variables
Un certain nombre de macros et variables existent pour iOS et Android. Ce fichier CMakeLists.txt exemple en affiche certaines :
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()
Fichier CMakeLists.txt exemple
Pour un projet nommé Example, contenant des fichiers source dans le même dossier, voici une présentation minimale du fichier CMakeLists.txt :
cmake_minimum_required (VERSION 3.10) project (Example) file(GLOB Example_SRC "*.h" "*.cpp" ) add_executable(Example ${Example_SRC})
Ces commandes spécifient la version minimale (3.10), le nom du projet, l'utilisation de tous les fichiers .cpp et .h disponibles, et la compilation du tout en un fichier Example.exe.
Rassembler tous les fichiers avec la commande “Glob” est rapide et simple, mais ce n'est pas une pratique recommandée, il est préférable de spécifier les fichiers à utiliser. Vous pouvez spécifier les fichiers .cpp et les en-têtes. Pour spécifier des fichiers .cpp, voici un exemple minimal :
cmake_minimum_required (VERSION 3.10) project (Example) add_executable(Example main.cpp foo.cpp bar.cpp)
Fichier CMakeLists.txt exemple : Application 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 )
Fichier CMakeLists.txt exemple : Appplication 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)
Fichier CMakeLists.txt exemple : Bibliothèque partagée
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 )
Fichier CMakeLists.txt exemple : Bibliothèque statique
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 )
Fichier CMakeLists.txt exemple : Package
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 )
Fichier CMakeLists.txt exemple : Ressources
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} )