← Tüm makaleler

VS Code ve GCC ile C Geliştirme Ortamı Kurulumu

Windows (MSYS2), macOS ve Linux üzerinde VS Code, GCC ve hata ayıklayıcı kurulumu, ilk derleme ve breakpoint ile çalışma

VS Code ve GCC ile C Geliştirme Ortamı Kurulumu

C öğrenirken en hızlı ilerleme, yazdığınız kodu kendi bilgisayarınızda derleyip çalıştırabildiğiniz ve adım adım izleyebildiğiniz zaman gelir. Tarayıcıda çalışan kod ortamları kısa örnekler için yeterlidir, ancak birden fazla dosyadan oluşan projeler, derleyici uyarılarını okumak ve hata ayıklayıcı (debugger) ile değişkenleri izlemek için gerçek bir ortam gerekir. Bu yazıda Windows, macOS ve Linux üzerinde VS Code ile GCC'yi kuracak, ilk programınızı önce terminalden, sonra VS Code içinden derleyip hata ayıklayıcıyla çalıştıracaksınız. Burada kurduğunuz GCC, gömülü sistemlerde kullanacağınız avr-gcc ve arm-none-eabi-gcc derleyicileriyle aynı ailedendir; komut satırı bayrakları ve hata mesajları da büyük ölçüde aynıdır.

Bu yazının sonunda şunları yapabileceksiniz: VS Code, C/C++ eklentisi, GCC ve hata ayıklayıcıyı kendi işletim sisteminize kurmak; bir C programını terminalden uyarı bayraklarıyla derlemek; VS Code içinde Ctrl+Shift+B ile derleyip F5 ile breakpoint'te durmak ve sık görülen kurulum hatalarını çözmek.

Not: Kurulum adımları VS Code'un resmi C/C++ rehberlerini takip eder. Rehberler C++ (g++) üzerinden anlatılmıştır; biz aynı adımları C için gcc ile uyguluyoruz.

Neye İhtiyacımız Var?

VS Code bir kod editörüdür; kendi başına C kodu derleyemez. Bir C programını çalıştırmak için birlikte çalışan üç ayrı araca ihtiyaç vardır:

Araç Görevi Windows macOS Linux
Editör Kodu yazmak, aracı çağırmak VS Code VS Code VS Code
Derleyici .c dosyasını çalıştırılabilir dosyaya çevirmek GCC (MSYS2) Clang (gcc adıyla da çağrılır) GCC
Hata ayıklayıcı Programı satır satır çalıştırmak, değişkenleri izlemek GDB LLDB GDB
{
  "title": "VS Code ile C Programı Derleme Akışı",
  "subtitle": "Editör yalnızca derleyiciyi ve hata ayıklayıcıyı çağırır; asıl işi onlar yapar",
  "nodes": [
    { "id": "src",  "label": "hello.c",            "sub": "VS Code'da yazdığınız kaynak kod",   "color": "blue"  },
    { "id": "gcc",  "label": "gcc",                "sub": "Önişlemci + derleyici + bağlayıcı",  "color": "slate" },
    { "id": "exe",  "label": "hello / hello.exe",  "sub": "Çalıştırılabilir dosya (-g ile debug bilgisi)", "color": "amber" },
    { "id": "dbg",  "label": "GDB / LLDB",         "sub": "Breakpoint, adım adım çalıştırma",   "color": "slate" },
    { "id": "out",  "label": "Terminal çıktısı",    "sub": "printf ile yazılan metin",           "color": "green" }
  ],
  "edges": [
    { "from": "src", "to": "gcc", "forwardLabel": "Ctrl+Shift+B" },
    { "from": "gcc", "to": "exe", "forwardLabel": "-o hello" },
    { "from": "exe", "to": "dbg", "forwardLabel": "F5" },
    { "from": "dbg", "to": "out", "forwardLabel": "" }
  ]
}

VS Code'daki "Build" ve "Debug" düğmeleri arka planda bu araçları komut satırından çağırır. Bu yüzden önce derleyicinin terminalden tek başına çalıştığından emin olacağız; VS Code entegrasyonu en son adımdır.

Kısacası: editör, derleyici ve hata ayıklayıcı ayrı programlardır ve üçünün de kurulu olması gerekir.

VS Code ve C/C++ Eklentisinin Kurulumu

  1. code.visualstudio.com adresinden işletim sisteminize uygun VS Code sürümünü indirip kurun.
  2. VS Code'u açın ve sol kenar çubuğundaki Extensions simgesine tıklayın (veya Ctrl+Shift+X, macOS'ta Cmd+Shift+X).
  3. Arama kutusuna C/C++ yazın ve yayıncısı Microsoft olan C/C++ eklentisini kurun. Eklenti kimliği ms-vscode.cpptools'tur.

Uyarı: Aynı aramada çıkan Code Runner eklentisini kurmanız gerekmez. Code Runner programı salt okunur bir "Output" panelinde çalıştırır; scanf ile klavyeden veri okuyan programlar orada girdi alamaz ve takılıp kalmış gibi görünür.

C/C++ eklentisi bir derleyici içermez; yalnızca kod tamamlama, hata işaretleme ve hata ayıklayıcı entegrasyonu sağlar. Derleyiciyi bir sonraki bölümde ayrıca kuracağız.

Derleyicinin Kurulumu

Yalnızca kendi işletim sisteminizin alt başlığını uygulayın.

Windows: MSYS2 ile GCC

Windows'ta GCC'yi MSYS2 üzerinden kuruyoruz. MSYS2, Windows için hazırlanmış GCC, GDB ve diğer geliştirme araçlarını tek bir paket yöneticisiyle (pacman) kurmanızı sağlar. 64-bit Windows 10 (1809 veya üstü) ya da Windows 11 gerekir.

  1. msys2.org adresinden kurulum dosyasını indirin ve çalıştırın. Varsayılan kurulum klasörü C:\msys64'tür; değiştirmemenizi öneririz.
  2. Kurulumun son ekranında Run MSYS2 now kutusu işaretliyken Finish'e tıklayın. Bir MSYS2 terminali açılır.
  3. Bu terminalde derleyici araç zincirini kurun:
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
  1. Paket seçimi sorulduğunda Enter ile varsayılanı (tümü) kabul edin, kurulum onayı sorulduğunda Y yazın. Bu paket grubu gcc, g++ ve gdb'yi birlikte kurar.

Şimdi Windows'un bu araçları her terminalden bulabilmesi için klasörü PATH ortam değişkenine ekleyin:

  1. Başlat menüsünde Edit environment variables for your account (Türkçe Windows'ta "Hesabınız için ortam değişkenlerini düzenleyin") araması yapın ve açın.
  2. User variables bölümünde Path'i seçip Edit'e tıklayın.
  3. New ile şu satırı ekleyin:
C:\msys64\ucrt64\bin
  1. OK ile iki pencereyi de kapatın.

Uyarı: PATH değişikliği yalnızca yeni açılan terminallerde geçerli olur. Kurulumdan önce açık olan Komut İstemi, PowerShell ve VS Code pencerelerini kapatıp yeniden açın.

Not: WSL2 kullanıyorsanız bu alt başlığı atlayıp WSL terminalinde Linux adımlarını uygulayabilirsiniz. Bu yazıda anlatılan yöntem ise doğrudan Windows üzerinde çalışan .exe dosyaları üretir.

macOS: Xcode Command Line Tools

macOS'ta derleyici Apple'ın Xcode Command Line Tools paketiyle gelir. Terminali açın ve kontrol edin:

clang --version

Komut bulunamazsa paketi kurun:

xcode-select --install

Açılan pencerede Install'a tıklayın. Kurulum birkaç dakika sürer.

Not: macOS'ta gcc komutu aslında Clang derleyicisini çalıştırır; gcc --version çıktısında "Apple clang" yazdığını göreceksiniz. C öğrenmek için bu tamamen yeterlidir: Clang aynı C standardını derler ve bu yazıdaki bayrakları (-Wall, -Wextra, -g, -std=c11) aynen kabul eder. Hata ayıklayıcı olarak GDB yerine LLDB kullanılır.

Linux (Ubuntu / Debian)

sudo apt-get update
sudo apt-get install build-essential gdb

build-essential paketi gcc, make ve standart C kütüphanesinin başlık dosyalarını birlikte kurar. Fedora'da karşılığı sudo dnf install gcc gdb make, Arch'ta sudo pacman -S base-devel gdb'dir.

Hangi işletim sisteminde olursanız olun, bu adımın sonunda terminalden çağrılabilen bir C derleyiciniz ve bir hata ayıklayıcınız olmalıdır.

Kurulumu Doğrulama

Yeni bir terminal açın (Windows'ta Komut İstemi veya PowerShell; MSYS2 terminali değil) ve şu komutları çalıştırın:

gcc --version
gdb --version      # Windows ve Linux
lldb --version     # macOS

Windows'ta gcc --version çıktısının ilk satırı gcc.exe (... Built by MSYS2 project) ile başlar ve ardından sürüm numarası gelir. Linux'ta gcc (Ubuntu ...), macOS'ta Apple clang version ... görürsünüz.

Her komut bir sürüm satırı yazdırıyorsa kurulum tamamdır. 'gcc' is not recognized veya command not found hatası alırsanız aşağıdaki Sık Karşılaşılan Sorunlar tablosuna bakın.

Derleyicinin terminalden çalıştığını doğrulamadan VS Code ayarlarına geçmeyin; VS Code da aynı komutu çağıracaktır.

İlk Program: Terminalden Derleme

Önce VS Code'u hiç kullanmadan derleme zincirini çıplak haliyle görelim. Bir çalışma klasörü oluşturun:

mkdir c-projects
cd c-projects
mkdir hello
cd hello

İpucu: Klasör adlarında boşluk ve Türkçe karakter kullanmayın (C Projelerim yerine c-projects). Bazı araçlar bu tür yolları yanlış ayrıştırır ve anlaşılması zor hatalar üretir.

Bu klasörde hello.c adında bir dosya oluşturun:

#include <stdio.h>

int main(void)
{
    printf("Merhaba, C!\n");
    return 0;
}

Derleyip çalıştırın:

gcc -std=c11 -Wall -Wextra -g hello.c -o hello
./hello            # macOS, Linux ve Windows PowerShell
hello.exe          # Windows Komut İstemi

Ekranda Merhaba, C! yazısını görmelisiniz. Kullandığımız bayrakların her biri bilinçli bir seçimdir:

Bayrak Anlamı Neden kullanıyoruz?
-std=c11 C11 standardına göre derle Derleyiciden derleyiciye değişen varsayılan yerine sabit bir dil sürümü
-Wall Yaygın uyarıları aç Hatalı ama derlenen kodu (yanlış printf formatı, kullanılmayan değişken) yakalar
-Wextra Ek uyarıları aç -Wall'un kapsamadığı durumları (kullanılmayan parametre, işaretli/işaretsiz karşılaştırma) yakalar
-g Hata ayıklama bilgisi ekle GDB/LLDB'nin kaynak satırlarını ve değişken adlarını gösterebilmesi için gerekir
-o hello Çıktı dosyasının adı Verilmezse çıktı a.out (Windows'ta a.exe) olur

Gömülü projelerde de aynı bayrakları kullanacaksınız; örneğin avr-gcc -std=c11 -Wall -Wextra -g -mmcu=atmega328p ... komutu buradakinin yalnızca hedef işlemci eklenmiş halidir.

Bu adımda derleyicinin VS Code'dan bağımsız bir program olduğunu ve tek komutla .c dosyasından çalıştırılabilir dosya ürettiğini gördünüz.

VS Code ile Derleme ve Hata Ayıklama

Klasörü açmak

VS Code'da File > Open Folder ile hello klasörünü açın. VS Code ayarlarını bu klasörün içindeki .vscode/ alt klasörüne kaydeder; her proje için ayrı bir klasör açmak bu yüzden önemlidir. Windows'ta VS Code'u PATH değişikliğinden sonra başlattığınızdan emin olun.

İlk derleme ve hata ayıklama

  1. hello.c dosyasını açın ve printf satırının solundaki boşluğa tıklayarak (veya F9) bir breakpoint koyun. Kırmızı bir nokta belirir.
  2. Editörün sağ üst köşesindeki ▷ düğmesinin yanındaki oka tıklayın ve Debug C/C++ File'ı seçin.
  3. Çıkan listeden derleyicinizi seçin:

Uyarı: Listede g++ / clang++ seçenekleri de görünür; bunlar C++ derleyicileridir. C dosyaları için gcc / clang satırını seçin.

VS Code programı derler, hata ayıklayıcıyı başlatır ve breakpoint satırında durur. Sol paneldeki Variables bölümünde yerel değişkenleri görebilirsiniz. Üstteki araç çubuğuyla programı ilerletin:

Tuş Komut Etkisi
F5 Continue Bir sonraki breakpoint'e kadar çalıştır
F10 Step Over Satırı çalıştır, fonksiyonun içine girme
F11 Step Into Çağrılan fonksiyonun içine gir
Shift+F5 Stop Hata ayıklamayı bitir

Bu ilk çalıştırmada VS Code .vscode/ klasörüne iki dosya oluşturur: derleme komutunu tanımlayan tasks.json ve hata ayıklayıcı ayarlarını tutan launch.json.

tasks.json: derleme komutunu düzenlemek

Otomatik oluşturulan tasks.json yalnızca -g bayrağını kullanır. terminalden derlerken kullandığımız uyarı bayraklarını eklemek için .vscode/tasks.json dosyasını açın ve args listesini aşağıdaki gibi düzenleyin. Windows için tam dosya:

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: gcc.exe build active file",
      "command": "C:\\msys64\\ucrt64\\bin\\gcc.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-std=c11",
        "-Wall",
        "-Wextra",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ],
      "options": { "cwd": "${fileDirname}" },
      "problemMatcher": ["$gcc"],
      "group": { "kind": "build", "isDefault": true },
      "detail": "Task generated by Debugger."
    }
  ]
}

macOS ve Linux'ta dosya aynı yapıdadır; yalnızca şu alanlar farklıdır:

Alan macOS Linux
label C/C++: clang build active file C/C++: gcc build active file
command /usr/bin/clang /usr/bin/gcc
Çıktı yolu (-o sonrası) ${fileDirname}/${fileBasenameNoExtension} ${fileDirname}/${fileBasenameNoExtension}

Not: label değerini değiştirmeyin. launch.json içindeki preLaunchTask alanı derleme görevini bu adla bulur; ikisi birebir aynı olmalıdır.

Artık Ctrl+Shift+B (macOS'ta Cmd+Shift+B) yalnızca derler, F5 ise derleyip hata ayıklayıcıyı başlatır. Derleyici uyarıları ve hataları Problems panelinde listelenir; bir satıra tıklamak sizi ilgili kod satırına götürür (problemMatcher: $gcc bunu sağlar).

İpucu: Derleme ve hata ayıklama komutları o an editörde açık olan dosyayı (${file}) derler. tasks.json açıkken Ctrl+Shift+B'ye basarsanız GCC JSON dosyasını derlemeye çalışır ve anlamsız hatalar verir. Önce .c dosyasının sekmesine tıklayın.

Artık VS Code, terminalde elle yazdığınız GCC komutunun aynısını bir kısayolla çalıştırıyor ve hata ayıklayıcıyı ona bağlıyor.

Sık Karşılaşılan Sorunlar

Belirti Olası neden Çözüm
'gcc' is not recognized as an internal or external command C:\msys64\ucrt64\bin PATH'te yok veya terminal eski PATH'i kontrol edin, tüm terminalleri ve VS Code'u kapatıp yeniden açın
MSYS2'de gcc: command not found Yanlış MSYS2 kabuğu açık Başlat menüsünden MSYS2 UCRT64 kabuğunu açın veya normal Komut İstemi kullanın
gdb --version çalışmıyor ama gcc çalışıyor toolchain grubu eksik kurulmuş MSYS2'de pacman -S --needed mingw-w64-ucrt-x86_64-gdb
VS Code'da "miDebuggerPath is invalid" GDB kurulu değil veya yol yanlış Önceki satırdaki gibi GDB'yi kurun, launch.json'daki yolu kontrol edin
scanf içeren program girdi beklerken takılıyor Code Runner'ın "Output" paneli kullanılıyor Programı F5 ile veya terminalden çalıştırın
Permission denied / .exe silinemiyor Program hâlâ çalışıyor veya antivirüs dosyayı kilitledi Çalışan programı kapatın; gerekirse proje klasörünü antivirüs taramasından hariç tutun
#include <stdio.h> altı kırmızı dalgalı Eklenti derleyiciyi bulamadı Ctrl+Shift+P > C/C++: Select IntelliSense Configuration ile gcc / clang'ı seçin

Sorunların büyük çoğunluğu PATH ve eski terminal penceresinden kaynaklanır; ilk adım her zaman yeni bir terminalde gcc --version denemektir.

Uygulama: Uyarıyı Yakala, Düzelt, Adım Adım İzle

Yazıyı, derleyici uyarılarının neden açık tutulduğunu gösteren küçük bir programla bitirelim. hello klasörünün yanında average adında yeni bir klasör açın, içinde average.c oluşturun:

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    uint8_t samples[4] = {12, 15, 11, 14};
    uint16_t sum = 0;
    int unused;

    for (int i = 0; i < 4; i++) {
        sum += samples[i];
    }

    float average = sum / 4.0f;
    printf("Toplam: %u\n", sum);
    printf("Ortalama: %d\n", average);   /* hatalı format: float için %d */

    return 0;
}

Ctrl+Shift+B ile derleyin. Program yine de derlenir, ancak Problems panelinde iki uyarı görürsünüz:

warning: unused variable 'unused' [-Wunused-variable]
warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]

macOS'ta Clang aynı iki sorunu biraz farklı cümlelerle bildirir (format specifies type 'int' but the argument has type 'double'); anlamı aynıdır.

İkinci uyarı gerçek bir hatadır: printf float değeri tamsayı gibi okur ve ekrana anlamsız bir sayı yazar. -Wall olmasaydı bu kod sessizce derlenecekti. Şimdi düzeltin:

  1. int unused; satırını silin.
  2. Son printf satırını printf("Ortalama: %.2f\n", average); olarak değiştirin.
  3. sum += samples[i]; satırına breakpoint koyun ve F5 ile hata ayıklamayı başlatın.
  4. F10 ile her adımda Variables panelinde i ve sum değerlerinin nasıl değiştiğini izleyin: sum sırasıyla 12, 27, 38, 52 olur.
  5. Breakpoint'i kaldırıp F5 ile programı tamamlayın. Terminalde Toplam: 52 ve Ortalama: 13.00 görmelisiniz.

Bu küçük döngü, gömülü sistemlerde de her gün yapacağınız işin aynısıdır: derle, uyarıları oku, düzelt, hata ayıklayıcıyla değişkenleri izle.

Kontrol listesi

Listenin tamamı işaretliyse ortamınız hazır.

Özet

VS Code yalnızca bir editördür; C kodunu derleyen GCC (macOS'ta Clang) ve programı adım adım çalıştıran GDB (macOS'ta LLDB) ayrı kurulan araçlardır. Bir sorun çıktığında ilk olarak yeni bir terminalde gcc --version ile derleyicinin PATH üzerinden bulunduğunu kontrol etmek ve uyarı bayraklarını (-Wall -Wextra) hiçbir zaman kapatmamak gerekir.

Kavram Açıklama
Editör / derleyici / hata ayıklayıcı VS Code kodu yazar; GCC derler; GDB/LLDB çalışan programı izler
MSYS2 UCRT64 Windows'ta GCC ve GDB'yi pacman ile kurmak için kullanılan ortam
PATH Terminalin gcc komutunu bulduğu klasör listesi; değişiklik yeni terminallerde geçerli olur
-Wall -Wextra Derlenen ama hatalı olan kodu uyarı olarak gösteren bayraklar
-g Hata ayıklayıcının kaynak satırlarını ve değişken adlarını görmesini sağlar
tasks.json VS Code'un Ctrl+Shift+B ile çalıştırdığı derleme komutu
launch.json F5 ile başlatılan hata ayıklama ayarları; preLaunchTask ile derleme görevine bağlanır
Breakpoint Programın durduğu satır; F10/F11 ile adım adım ilerlenir

Ortamınız hazır olduğuna göre C'nin gömülü sistemlerde neden bu kadar yaygın olduğunu Gömülü Sistemlerde C Programlama Dili yazısında, aynı GCC'nin bir mikrodenetleyici için firmware üretirken arka planda neler yaptığını ise GCC Build Pipeline yazısında okuyabilirsiniz.

Kitap serisini incele →