# Creating Binary Modules: CMake

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/Creating_Binary_Modules:_CMake
- **Çeviri tarihi:** 2025-09-08

Binary modüller, C++ kullanarak Lua'nın işlevselliğini genişletmenize olanak tanır.

Bu sayfa size **CMake kullanarak** binary modülleri derlemek için IDE'nizi nasıl kuracağınızı öğretecektir.

Kurulum tamamlandıktan sonra C Lua API ile etkileşim konusunda yardım için [C Lua: Fonksiyonlar](https://gmod.tr/wiki/C_Lua:_Functions) sayfasına bakın.

> **NOT:** Birçok popüler kütüphane CMake yerine premake kullanır, bu nedenle bunun yerine [Binary Modüller Oluşturma: Premake](https://gmod.tr/wiki/Creating_Binary_Modules:_Premake) sayfasını kullanmanız önerilir.

## Bağımlılıklar

Binary Modüllerin oluşturulması için yalnızca CMake ve bir C++ derleyicisi gerekir.

Her ikisini de Windows'ta Visual Studio Installer (Visual Studio 2019'da "Desktop development with C++") aracılığıyla, macOS'ta Xcode/homebrew ile veya Linux'ta favori paket yöneticinizi kullanarak kurabilirsiniz. CMake için indirmeler [CMake web sitesinde](https://cmake.org/download/) de mevcuttur.

Bir IDE kullanmak istiyorsanız, CMake projelerini desteklediği sürece herhangi birini (Visual Studio, CLion, vb.) seçebilirsiniz.

Bir IDE kullanmak istemiyorsanız, modülü manuel olarak da oluşturabilirsiniz, ancak bu yaklaşım bu kılavuzda ayrıntılı olarak anlatılmayacaktır.

## Proje kurulumu

İhtiyacınız olan başlık dosyaları (header) [burada mevcuttur](https://github.com/Facepunch/gmod-module-base/tree/development). Bu dosyalar, projenize oyunla nasıl arayüz oluşturulacağı hakkında bilgi sağlayacak ve modülü derlemek için bazı genel ayarları belirleyecektir.

İlk olarak, boş bir klasör oluşturun. Bu klasör, modülünüzle ilgili tüm dosyaları içerecek ve bundan sonra "ana klasör" olarak anılacaktır.

Şimdi, başlık dosyalarının bir kopyasını indirin ve ana klasörün bir alt klasörüne yerleştirin. Bu alt klasörü istediğiniz gibi adlandırabilirsiniz, ancak bu kılavuzda alt klasör adı olarak `gmod-headers` kullanılacaktır. Farklı bir isim seçtiyseniz, bu ismi kendi seçtiğinizle değiştirmeniz gerekecektir. Dosyaları doğru konuma çıkardığınızı kontrol etmek için, ana klasörde `gmod-headers/include` ve `gmod-headers/examples` yollarının bulunduğundan emin olun.

Sırada, bir CMake proje tanımı ayarlayacağız. Bunu yapmak için, ana klasörde `CMakeLists.txt` adında bir dosya oluşturun ve aşağıdaki içeriği içine yapıştırın:

```lua
cmake_minimum_required(VERSION 3.10)

# Proje adı pek önemli değildir ve istediğiniz herhangi bir şeyi adlandırabilirsiniz.
# Sadece aşağıda tanımlanan modül adıyla çakışmamalıdır.
project(gmod-module-guide LANGUAGES CXX)

set(CMAKE_CONFIGURATION_TYPES Release Debug)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Başlık dosyalarını ve ayarları düzenleyen gmod-module-base projesini yükleyin.
add_subdirectory(gmod-headers/include)

# Burada tanımlanan kütüphane adı (bu durumda, "testmodule") modülün adı olacaktır.
add_library(testmodule SHARED)

# Modül için gerekli kaynak dosyalarını ekleyin.
# Yine, dosya adları önemli değildir ve "module.cpp"den sonra boşlukla ayrılmış daha fazla dosya adı ekleyerek birden fazla dosya ekleyebilirsiniz.
target_sources(testmodule PRIVATE module.cpp)

# Başlık dosyalarını ve ayarları modülümüze uygulayın.
target_link_libraries(testmodule gmod-module-base)

set_gmod_suffix_prefix(testmodule)
```

Projemizi tanımladığımıza göre, şimdi bir modüle derleyebileceğimiz bir şeye ihtiyacımız var.

Gösterim amacıyla "Hello World" örneği gayet iyi iş görür, bu yüzden `gmod-headers/examples/HelloWorld/HelloWorld.cpp` dosyasını kopyalayın ve ana klasöre `module.cpp` olarak yapıştırın. Artık bu dosyayı değiştirebilir ve üzerinde denemeler yapabilirsiniz.

Derlemek için, ana klasörü seçtiğiniz IDE'de açın (yarı-düzgün herhangi bir IDE, `CMakeLists.txt` dosyasını algılayıp bir CMake projesi kurmalıdır) ve oradaki "Build" düğmesine basın. IDE kullanmayan geliştiriciler, mevcut herhangi bir "bir CMake projesi nasıl derlenir" kılavuzunu takip edebilir. Binary modül, CMake çıktısının yerleştirildiği yerde, doğru isim zaten uygulanmış olarak oluşacaktır.

## İsimlendirme & Konum

Modül dosyaları garrysmod/lua/bin/ klasörüne yerleştirilmelidir.

İsimler, platforma ve Lua alanına (realm) göre farklılık gösterir.

| Dosya adı | Taraf | require(isim) | Platform |
|---|---|---|---|
| `gmsv_example_win32.dll` | Sunucu | example | Windows x32 |
| `gmcl_example_win32.dll` | İstemci | example | Windows x32 |
| `gmsv_example_win64.dll` | Sunucu | example | Windows x64 (`x86-64` branch'i gereklidir) |
| `gmcl_example_win64.dll` | İstemci | example | Windows x64 (`x86-64` branch'i gereklidir) |
| `gmsv_example_osx.dll` | Sunucu | example | OSX (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmcl_example_osx.dll` | İstemci | example | OSX (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmsv_example_linux.dll` | Sunucu | example | Linux x32 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmcl_example_linux.dll` | İstemci | example | Linux x32 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmsv_example_linux64.dll` | Sunucu | example | Linux x64 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır; `x86-64` branch'i gereklidir) |
| `gmcl_example_linux64.dll` | İstemci | example | Linux x64 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır; `x86-64` branch'i gereklidir) |

> **NOT:** Menü durumu (menu state) modülleri `gmsv_isim_platform.dll` altında kategorize edilir

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/Creating_Binary_Modules:_CMake
