CMake komut dosyası, isim vermeniz gereken bir düz metin dosyasıdır
CMakeLists.txt ve CMake'in
C/C++ kitaplıklarında geçerlidir. Yerel kaynaklarınızın halihazırda bir CMake derlemesi yoksa
komut dosyasını kullanmak için, kendiniz bir tane oluşturmanız ve uygun CMake
komutlarının ikisine katlanır. CMake'i nasıl yükleyeceğinizi öğrenmek için NDK'yı yükleme ve yapılandırma
ve CMake olarak değiştirin.
Bu bölümde, derlemenize eklemeniz gereken bazı temel komutlar anlatılmaktadır. komut dosyasını kullanarak yerel reklam öğenizi oluştururken hangi kaynakların kullanılacağını CMake'e bildirir. kitaplığını açar. Daha fazla bilgi edinmek için CMake komutları ile ilgili resmi dokümanları okuyun.
Yeni bir CMake derleme komut dosyası yapılandırdıktan sonra, Gradle'ı yapılandırma CMake projenizi bir derleme bağımlılığı olarak dahil etmeniz gerekir. Böylece Gradle, yerel kitaplığınızı uygulamanızın APK'sı ile paketler.
  Not: Projenizde ndk-build kullanılıyorsa
  CMake derleme komut dosyası oluşturma. Kolayca
  
    Gradle'ı yapılandırma
  web sitenize bir yol sağlayarak mevcut yerel kitaplık projenizi
  Android.mk dosyası olarak kaydedin.
CMake derleme komut dosyası oluşturma
CMake derleme komut dosyanız olarak kullanabileceğiniz bir düz metin dosyası oluşturmak için şu şekilde devam edin:
- IDE'nin sol tarafından Proje bölmesini açın ve Proje görünümünü seçin.
- your-module kök dizinini sağ tıklayın ve
  Yeni > Dosya.
    Not: Derleme komut dosyasını istediğiniz herhangi bir konumda oluşturabilirsiniz. Ancak derleme komut dosyasını yapılandırırken yerel kaynağınızın yolları dosyaları ve kitaplıklar, derleme komut dosyasının konumuna bağlıdır. 
- "CMakeLists.txt" yazın seçeneğini belirleyin ve Tamam'ı tıklayın.
  Artık CMake komutları ekleyerek derleme komut dosyanızı yapılandırabilirsiniz. Talimat vermek için
  Yerel kaynak kodundan yerel kitaplık oluşturmak için derleme komut dosyanıza cmake_minimum_required() ve add_library() komutlarını ekleyin:
# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.
cmake_minimum_required(VERSION 3.4.1)
# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add_library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.
add_library( # Specifies the name of the library.
             native-lib
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )
  İpucu: CMake'in şuradan yerel bir kitaplık oluşturmasını sağladığınıza benzer:
  kaynak dosyalar için
  
  add_executable() komutunu kullanarak CMake'i bunun yerine bir
  yürütülebilir dosyalar. Ancak,
  yerel kaynaklar isteğe bağlıdır ve kendi
  APK, proje gereksinimlerinin çoğunu karşılar.
  CMake derleme komut dosyanıza şunu kullanarak bir kaynak dosya veya kitaplık eklediğinizde:
  add_library(), Android Studio ilişkili başlık dosyalarını da gösterir
  Proje görünümündeyken Ancak,
  CMake'in, derleme süresi sırasında başlık dosyalarınızı bulabilmesi için öncelikle
  CMake'inize include_directories() komutunu ekleyin.
  komut dosyasını derleyin ve başlıklarınızın yolunu belirtin:
add_library(...) # Specifies a path to native header files. include_directories(src/main/cpp/include/)
CMake'in, kitaplığınızın dosyasını adlandırmak için kullandığı kural aşağıdaki gibidir:
  liblibrary-name.so
  Örneğin, "native-lib" değerini belirtirseniz paylaşılan kitaplığınızın adı olarak
  CMake, derleme komut dosyasında
  libnative-lib.so Ancak, bu kitaplığı
  Java veya Kotlin kodu kullanıyorsanız CMake derleme komut dosyasında belirttiğiniz adı kullanın:
Kotlin
companion object { init { System.loadLibrary("native-lib"); } }
Java
static { System.loadLibrary("native-lib"); }
Not: CMake derlemenizdeki bir kitaplığı yeniden adlandırır veya kaldırırsanız veya Gradle'ın değişiklikleri uygulamadan önce projenizi temizlemeniz kitaplığın eski sürümünü APK'nızdan kaldırır. Cihazınızı temizlemek için altındaki Derle > Projeyi Temizle'yi seçin.
  Android Studio, kaynak dosyaları ve üstbilgileri
  Proje bölmesindeki cpp grubunu içerir. Şunu kullanarak:
  birden fazla add_library() komutu varsa, bu komutlar için
  kitaplıklarını kullanarak CMake'in diğer kaynak dosyalardan derleme yapmasına olanak tanır.
NDK API'leri ekleme
  Android NDK, bulabileceğiniz bir dizi yerel API ve kitaplık sağlar.
  faydalı olur. NDK kitaplıklarını projenizin hedefine ekleyerek bu API'lerden herhangi birini kullanabilirsiniz.
  CMakeLists.txt komut dosyası.
Önceden oluşturulmuş NDK kitaplıkları Android platformunda zaten mevcuttur. Dolayısıyla bunları derlemeniz veya APK'nızda paketlemeniz gerekir. Çünkü NDK kitaplıkları CMake'in arama yolunun bir parçası olduğu için arama yaparken kullanacağınız kitaplığın yerel NDK kurulumunuzdaki yerini alır; yalnızca şunları yapmanız gerekir: CMake'e, kullanmak istediğiniz kitaplığın adını girin ve buna bağlantı verin kendi yerel kitaplığınızla karşılaştırabilirsiniz.
  CMake derlemenize find_library() komutunu ekleyin
  komut dosyasını kullanarak NDK kitaplığını bulur ve yolunu değişken olarak saklar. Kullandığınız
  bu değişken, derleme komut dosyasının diğer bölümlerindeki NDK kitaplığına başvurmak için kullanılır.
  Aşağıdaki örnek, Android'e özgü günlük destek kitaplığını gösterir
  ve yolunu log-lib içinde saklar:
find_library( # Defines the name of the path variable that stores the
              # location of the NDK library.
              log-lib
              # Specifies the name of the NDK library that
              # CMake needs to locate.
              log )
  Yerel kitaplığınızın log içindeki işlevleri çağırması için
  kitaplıklarını bağlamak için target_link_libraries() komutunu kullanarak
  CMake derleme komut dosyanız:
find_library(...)
# Links your native library against one or more other native libraries.
target_link_libraries( # Specifies the target library.
                       native-lib
                       # Links the log library to the target library.
                       ${log-lib} )
  NDK, derlemeniz gereken bazı kitaplıkları da kaynak kodu olarak içerir.
  ve yerel kitaplığınıza bağlayın. Kaynak kodunu
  yerel kitaplık oluşturmak için CMake'inizde add_library() komutunu kullanın.
  derleme komut dosyasıdır. Yerel NDK kitaplığınıza giden yolu sağlamak için
  Android Studio'nun otomatik olarak belirlediği ANDROID_NDK yol değişkeni
  bir şablondur.
  Aşağıdaki komut, CMake'e
  NativeActivity alanını yöneten android_native_app_glue.c
  yaşam döngüsü olaylarını ve dokunmatik girişi statik bir kitaplığa çevirip
  native-lib:
add_library( app-glue
             STATIC
             ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c )
# You need to link static libraries against your shared native library.
target_link_libraries( native-lib app-glue ${log-lib} )
Önceden oluşturulmuş başka kitaplıklar ekleyin
  Önceden oluşturulmuş kitaplık eklemek,
  CMake to Build. Ancak, kitaplık zaten oluşturulduğundan
  CMake'e şunu bildirmek için IMPORTED işaretini kullanın:
  kitaplığı projenize aktarmak istiyorsanız:
add_library( imported-lib
             SHARED
             IMPORTED )
  Ardından
  set_target_properties() komutu şu şekildedir:
  aşağıda gösterilmiştir.
  Bazı kitaplıklar, belirli CPU mimarileri için ayrı paketler sunar veya
  Uygulama İkili Arabirimleri (ABI) ve
  ve onları ayrı dizinlerde düzenleyebilirsiniz. Bu yaklaşım, kütüphanelerin
  belirli CPU mimarilerinden yararlanırken yalnızca
  sürümleri de ekleyebilirsiniz. Bir kitaplığın birden fazla ABI sürümünü eklemek için
  CMake derleme komut dosyanıza,
  kitaplığın her sürümünde ANDROID_ABI yolunu kullanabilirsiniz
  değişkenine eklenmelidir. Bu değişken, NDK'nın desteklediği varsayılan ABI'lerin listesini veya filtrelenmiş bir liste kullanır
  ABI'lerin oranı
  
  Gradle'ı manuel olarak yapılandırın. Örnek:
add_library(...)
set_target_properties( # Specifies the target library.
                       imported-lib
                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION
                       # Provides the path to the library you want to import.
                       imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
  CMake'in, derleme süresi sırasında başlık dosyalarınızı bulabilmesi için
  include_directories() komutunu çalıştırın ve
  başlık dosyaları:
include_directories( imported-lib/include/ )
  Not: Şunu içermeyen önceden oluşturulmuş bir kitaplığı paketlemek istiyorsanız:
  Örneğin, herkese açık kullanıcı deneyimine sahip önceden oluşturulmuş
  imported-lib bağımlılığı varsa
  adımları uygulayın.
  Önceden oluşturulmuş kitaplığı kendi yerel kitaplığınıza bağlamak için şu klasöre ekleyin:
  CMake derleme komut dosyanızdaki target_link_libraries() komutu:
target_link_libraries( native-lib imported-lib app-glue ${log-lib} )
  Önceden oluşturulmuş kitaplığı APK'nızda paketlemek için:
  
  Gradle'ı sourceSets bloğuyla manuel olarak yapılandırarak
  .so dosyanızın yolunu ekleyin. APK'nızı oluşturduktan sonra,
  Gradle paketlerini APK'nıza eklemek için
  APK Analiz Aracı.
Diğer CMake projelerini dahil et
  Birden fazla CMake projesi oluşturmak ve bunların çıktılarını
  Android projesi için bir CMakeLists.txt dosyası kullanabilirsiniz.
  üst düzey CMake derleme komut dosyası (bu,
  bağlantı
  ) ve bu derlemenin bağımlıları olarak başka CMake projeleri ekleyin
  komut dosyası. Aşağıdaki üst düzey CMake derleme komut dosyası,
  Belirtmek için add_subdirectory() komutu
  derleme bağımlılığı olarak başka bir CMakeLists.txt dosyası oluşturur ve
  diğer önceden oluşturulan kitaplıklarda olduğu gibi çıktı.
# Sets lib_src_DIR to the path of the target CMake project.
set( lib_src_DIR ../gmath )
# Sets lib_build_DIR to the path of the desired output directory.
set( lib_build_DIR ../gmath/outputs )
file(MAKE_DIRECTORY ${lib_build_DIR})
# Adds the CMakeLists.txt file located in the specified directory
# as a build dependency.
add_subdirectory( # Specifies the directory of the CMakeLists.txt file.
                  ${lib_src_DIR}
                  # Specifies the directory for the build outputs.
                  ${lib_build_DIR} )
# Adds the output of the additional CMake build as a prebuilt static
# library and names it lib_gmath.
add_library( lib_gmath STATIC IMPORTED )
set_target_properties( lib_gmath PROPERTIES IMPORTED_LOCATION
                       ${lib_build_DIR}/${ANDROID_ABI}/lib_gmath.a )
include_directories( ${lib_src_DIR}/include )
# Links the top-level CMake build output against lib_gmath.
target_link_libraries( native-lib ... lib_gmath )
Komut satırından CMake'i çağırma
dışında bir Ninja projesi oluşturmak için CMake'i çağırmak için aşağıdaki komutu kullanın Android Studio:
cmake
-Hpath/to/cmakelists/folder
-Bpath/to/generated/ninja/project/debug/ABI
-DANDROID_ABI=ABI                               // For example, arm64-v8a
-DANDROID_PLATFORM=platform-version-string      // For example, android-16
-DANDROID_NDK=android-sdk/ndk/ndk-version
-DCMAKE_TOOLCHAIN_FILE=android-sdk/ndk/ndk-version/build/cmake/android.toolchain.cmake
-G Ninja
Bu komut, aşağıdaki komut dosyalarını oluşturmak için yürütülebilecek Ninja projesini
Android yürütülebilir kitaplıkları (.so dosya). CMAKE_TOOLCHAIN_FILE
NDK'nın CMake desteğini kullanmak için gereklidir. CMake 3.21 veya sonraki sürümlerde CMake'in yerleşik
Bunun yerine NDK desteği kullanılabilir ancak farklı bir değişken grubu kullanılmalıdır
açıklandığı gibi CMake'in Android için Çapraz Derleme dokümanlarında açıklandığı şekildedir.
