Synopsis
clang [seçenekler] dosya_adı ...
Description
clang; ön işleme (preprocessing), ayrıştırma (parsing), optimizasyon, kod üretimi, montaj (assembly) ve bağlama (linking) aşamalarını kapsayan bir C, C++ ve Objective-C derleyicisidir. Hangi üst düzey mod ayarının aktarıldığına bağlı olarak Clang, tam bir bağlama işlemi gerçekleştirmeden önce duracaktır. Clang son derece entegre bir yapıda olsa da, onu nasıl çağıracağınızı anlamak için derleme aşamalarını anlamak önemlidir. Bu aşamalar şunlardır:
Driver (Sürücü) clang yürütülebilir dosyası, aslında derleyici, montajcı (assembler) ve bağlayıcı (linker) gibi diğer araçların genel yürütülmesini kontrol eden küçük bir sürücüdür. Genellikle sürücüyle doğrudan etkileşime girmeniz gerekmez, ancak diğer araçları çalıştırmak için onu şeffaf bir şekilde kullanırsınız.
Preprocessing (Ön İşleme) Bu aşama, girdi kaynak dosyasının belirteçlere ayrılmasını (tokenization), makro açılımını, #include açılımını ve diğer ön işlemci yönergelerinin işlenmesini yönetir. Bu aşamanın çıktısı genellikle ".i" (C için), ".ii" (C++ için), ".mi" (Objective-C için) veya ".mii" (Objective-C++ için) dosyası olarak adlandırılır.
Parsing and Semantic Analysis (Ayrıştırma ve Anlamsal Analiz) Bu aşama, girdi dosyasını ayrıştırarak ön işlemci belirteçlerini bir ayrıştırma ağacına dönüştürür. Ayrıştırma ağacı formuna ulaştıktan sonra, ifadelerin türlerini hesaplamak ve kodun düzgün biçimlendirilip biçimlendirilmediğini belirlemek için anlamsal analiz uygular. Bu aşama, derleyici uyarılarının çoğunun yanı sıra ayrıştırma hatalarının üretilmesinden de sorumludur. Bu aşamanın çıktısı bir "Soyut Sözdizimi Ağacı"dır (AST - Abstract Syntax Tree).
Code Generation and Optimization (Kod Üretimi ve Optimizasyon) Bu aşama, bir AST'yi düşük seviyeli ara koda ("LLVM IR" olarak bilinir) ve nihayetinde makine koduna dönüştürür. Bu aşama, üretilen kodun optimize edilmesinden ve hedefe özel kod üretiminin gerçekleştirilmesinden sorumludur. Bu aşamanın çıktısı genellikle ".s" dosyası veya "assembly" (montaj) dosyası olarak adlandırılır.
Clang ayrıca, kod üreticisinin doğrudan nesne (object) dosyaları ürettiği entegre bir montajcının kullanımını da destekler. Bu, ".s" dosyasının üretilmesi ve hedef montajcının çağrılması yükünü ortadan kaldırır.
Assembler (Montajcı) Bu aşama, derleyicinin çıktısını bir hedef nesne dosyasına dönüştürmek için hedef montajcıyı çalıştırır. Bu aşamanın çıktısı genellikle ".o" dosyası veya "nesne" (object) dosyası olarak adlandırılır.
Linker (Bağlayıcı) Bu aşama, birden fazla nesne dosyasını tek bir yürütülebilir dosya veya dinamik kütüphane halinde birleştirmek için hedef bağlayıcıyı çalıştırır. Bu aşamanın çıktısı genellikle "a.out", ".dylib" veya ".so" dosyası olarak adlandırılır.
Clang Static Analyzer (Clang Statik Analiz Aracı)
Clang Statik Analiz Aracı, kod analizi yoluyla hataları bulmaya çalışmak için kaynak kodu tarayan bir araçtır. Bu araç Clang'in birçok parçasını kullanır ve aynı sürücüye yerleşiktir. Statik analiz aracının nasıl kullanılacağı hakkında daha fazla ayrıntı için lütfen https://clang-analyzer.llvm.org adresine bakın.
Options
Aşama Seçim Seçenekleri
-E: Ön işlemci aşamasını çalıştırır.
-fsyntax-only Ön işleme, ayrıştırma ve anlamsal analiz aşamalarını çalıştırır.
-S: Önceki aşamaların yanı sıra LLVM üretimi, optimizasyon aşamaları ve hedefe özel kod üretimini çalıştırarak bir assembly dosyası üretir.-c: Yukarıdakilerin tümünün yanı sıra montajcıyı da çalıştırarak bir hedef ".o" nesne dosyası üretir.
aşama seçim seçeneği yok Herhangi bir aşama seçim seçeneği belirtilmezse, yukarıdaki tüm aşamalar çalıştırılır ve sonuçları bir yürütülebilir dosya veya paylaşılan kütüphanede birleştirmek için bağlayıcı çalıştırılır.
Dil Seçimi ve Mod Seçenekleri
-x
-std=
C dili için desteklenen değerler şunlardır: c89 c90 iso9899:1990
ISO C 1990 iso9899:199409
Düzeltme 1 ile ISO C 1990 gnu89 gnu90
GNU uzantıları ile ISO C 1990 c99 iso9899:1999
ISO C 1999 gnu99
GNU uzantıları ile ISO C 1999 c11 iso9899:2011
ISO C 2011 gnu11
GNU uzantıları ile ISO C 2011 c17 iso9899:2017
ISO C 2017 gnu17
GNU uzantıları ile ISO C 2017 c23 iso9899:2024
ISO C 2023 gnu23
GNU uzantıları ile ISO C 2023 c2y
ISO C 202y gnu2y
GNU uzantıları ile ISO C 202y
PS4 hariç varsayılan C dili standardı gnu17'dir; PS4 üzerinde ise gnu99'dur.
C++ dili için desteklenen değerler şunlardır: c++98 c++03
Düzeltmelerle ISO C++ 1998 gnu++98 gnu++03
Düzeltmeler ve GNU uzantıları ile ISO C++ 1998 c++11
Düzeltmelerle ISO C++ 2011 gnu++11
Düzeltmeler ve GNU uzantıları ile ISO C++ 2011 c++14
Düzeltmelerle ISO C++ 2014 gnu++14
Düzeltmeler ve GNU uzantıları ile ISO C++ 2014 c++17
Düzeltmelerle ISO C++ 2017 gnu++17
Düzeltmeler ve GNU uzantıları ile ISO C++ 2017 c++20
Düzeltmelerle ISO C++ 2020 gnu++20
Düzeltmeler ve GNU uzantıları ile ISO C++ 2020 c++23
Düzeltmelerle ISO C++ 2023 gnu++23
Düzeltmeler ve GNU uzantıları ile ISO C++ 2023 c++2c
C++2c için çalışma taslağı gnu++2c
GNU uzantılarıyla C++2c için çalışma taslağı
Varsayılan C++ dili standardı gnu++14'tür.
OpenCL dili için desteklenen değerler şunlardır: cl1.0
OpenCL 1.0 cl1.1
OpenCL 1.1 cl1.2
OpenCL 1.2 cl2.0
OpenCL 2.0
Varsayılan OpenCL dili standardı cl1.0'dır.
CUDA dili için desteklenen değerler şunlardır: cuda
NVIDIA CUDA(tm)
-stdlib=
-rtlib=
-ansi: -std=c89 ile aynıdır.
-ObjC, -ObjC++ Kaynak girdi dosyalarını sırasıyla Objective-C ve Objective-C++ girdileri olarak kabul eder.
-trigraphs Üçlü karakterleri (trigraphs) etkinleştirir.
-ffreestanding Dosyanın barındırılan (hosted) bir ortam için değil, bağımsız (freestanding) bir ortam için derlenmesi gerektiğini belirtir. Bağımsız bir derlemenin, belirtilen dil modu ve hedef ortam için bağımsız arayüzleri destekleyen bir C Standart Kütüphanesine bağlanmayı gerektirdiğini unutmayın. Bu, memcpy, memmove ve memset gibi fonksiyonları içerir.
-fno-builtin strlen() ve malloc() gibi iyi bilinen kütüphane fonksiyonlarının özel işlemlerini ve optimizasyonlarını devre dışı bırakır.
-fno-builtin-
-fno-builtin-std-
C++ standart kütüphanesinin std ad alanında da sağladığı C standart kütüphane fonksiyonları için bunun yerine -fno-builtin-
-fmath-errno Matematik fonksiyonlarının errno değerini güncelliyor gibi ele alınması gerektiğini belirtir.
-fpascal-strings "\pfoo" ile Pascal tarzı dizgiler (strings) için desteği etkinleştirir.
-fms-extensions Microsoft uzantıları için desteği etkinleştirir.
-fmsc-version= _MSC_VER değerini ayarlar. Windows üzerindeyken, bu varsayılan olarak şu anda kurulu olan cl.exe sürümüyle aynı değere veya 1933'e ayarlanır. Diğer durumlarda ayarlanmaz.
-fborland-extensions Borland uzantıları için desteği etkinleştirir.
-fwritable-strings Tüm dizgi sabitlerini (string literals) varsayılan olarak yazılabilir hale getirir. Bu, dizgilerin tekilleştirilmesini (uniquing) ve diğer optimizasyonları devre dışı bırakır.
-flax-vector-conversions, -flax-vector-conversions=
• none: vektörler arasında örtük dönüşüme izin vermez
• integer: aynı genel bit genişliğine sahip tamsayı vektörleri arasında örtük bit dönüşümlerine (bitcast) izin verir
• all: aynı genel bit genişliğine sahip herhangi bir vektör arasında örtük bit dönüşümlerine (bitcast) izin verir
Belirtilmezse
-fblocks "Blocks" dil özelliğini etkinleştirir.
-fobjc-abi-version=version Kullanılacak Objective-C ABI sürümünü seçer. Mevcut sürümler 1 (eski "fragile" ABI), 2 (non-fragile ABI 1) ve 3'tür (non-fragile ABI 2).
-fobjc-nonfragile-abi-version=
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi Objective-C non-fragile ABI kullanımını etkinleştirir. Bu ABI'nin varsayılan olduğu platformlarda, -fno-objc-nonfragile-abi ile devre dışı bırakılabilir.
Hedef Seçim Seçenekleri Clang, tasarımının doğal bir parçası olarak çapraz derlemeyi (cross compilation) tamamen destekler. Clang sürümünüzün nasıl yapılandırıldığına bağlı olarak, bir dizi çapraz derleyici desteğine sahip olabilir veya yalnızca yerel bir hedefi destekleyebilir.
-arch
-target
-mmacos-version-min=
-miphoneos-version-min iPhone OS için derleme yaparken, uygulamanız tarafından desteklenen minimum sürümü belirtir.
--print-supported-cpus
Verilen hedef için ( --target=
-mcpu=?, -mtune=? --print-supported-cpus için bir takma ad (alias) görevi görür.
-mcpu=help, -mtune=help --print-supported-cpus için bir takma ad (alias) görevi görür.
-march=
--print-enabled-extensions --target, -march ve -mcpu değerlerinin kombinasyonu ile belirtilen hedef için etkinleştirilen uzantıların listesini yazdırır. Şu anda bu seçenek yalnızca AArch64 ve RISC-V üzerinde desteklenmektedir. RISC-V üzerinde bu seçenek, etkinleştirilmiş uzantıların ISA dizgisini de yazdırır.
--print-supported-extensions
Bir mimari için (--target=
Kod Üretim Seçenekleri
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4 Hangi optimizasyon seviyesinin kullanılacağını belirtir: -O0 "Optimizasyon yok" anlamına gelir: bu seviye en hızlı şekilde derleme yapar ve hata ayıklamaya en uygun kodu üretir.
-O1 -O0 ile -O2 arasında bir yerdedir.
-O2 Çoğu optimizasyonu etkinleştiren orta düzeyde bir optimizasyon seviyesidir.
-O3 -O2 gibidir, ancak gerçekleştirilmesi daha uzun süren veya (programın daha hızlı çalışmasını sağlamak amacıyla) daha büyük kod üretebilecek optimizasyonları etkinleştirir.
-Ofast Dil standartlarına sıkı uyumu ihlal edebilecek diğer agresif optimizasyonlarla birlikte -O3'teki tüm optimizasyonları etkinleştirir. Bu seçenek Clang 19'da kullanımdan kaldırılmıştır ve standart dışı matematik davranışı talebi amaçlanıyorsa bunun yerine -ffast-math ile birlikte -O3 kullanılması gerektiğine dair bir uyarı verilir. Kaldırılması için henüz bir zaman çizelgesi yoktur; amaç, doğru kodun gözlemlenebilir davranışını değiştiren bir optimizasyon bayrağının şaşırtıcı davranışı nedeniyle -Ofast kullanımını caydırmaktır.
-Os Kod boyutunu azaltmak için ekstra optimizasyonlarla birlikte -O2 gibidir.
-Oz -Os (ve dolayısıyla -O2) gibidir, ancak kod boyutunu daha da azaltır.
-Og -O1'e benzer, ancak biraz azaltılmış optimizasyon ve daha iyi değişken görünürlüğü sunar. -O1 ile aynı optimizasyonlar çalıştırılır, ancak optimizasyonların kullanıcı değişkenlerinin ömrünü azaltmasını önlemeye çalışan ve hata ayıklama sırasında bunların kullanılabilirliğini artıran -fextend-variable-liveness bayrağı da ayarlanır.
-O -O1 ile eşdeğerdir.
-O4 ve üzeri Şu anda -O3 ile eşdeğerdir.
-g, -gline-tables-only, -gmodules
Hata ayıklama bilgisi çıktısını kontrol eder. Clang hata ayıklama bilgisinin en iyi - -O0 seviyesinde çalıştığını unutmayın. -g ile başlayan birden fazla seçenek belirtildiğinde, sonuncusu geçerli olur:
-g Hata ayıklama bilgisi üretir.
-gline-tables-only Yalnızca satır tablosu hata ayıklama bilgisi üretir. Bu, satır içi yerleştirme (inlining) bilgileriyle sembolik geri izleme (backtrace) sağlar, ancak değişkenler, konumları veya türleri hakkında herhangi bir bilgi içermez.
-gmodules Her nesne dosyasına gereksiz hata ayıklama türü bilgisi yazmak yerine, Clang modüllerinde veya önceden derlenmiş başlıklarda tanımlanan türlere harici referanslar içeren hata ayıklama bilgisi üretir. Bu seçenek, Clang modül biçimini şeffaf bir şekilde, Clang modülünü hata ayıklama bilgisiyle birlikte tutan nesne dosyası kapsayıcılarına dönüştürür. Clang modülleri veya önceden derlenmiş başlıklar kullanan bir programı derlerken bu seçenek, daha hızlı derleme süreleri ve çok daha küçük nesne dosyaları ile eksiksiz hata ayıklama bilgisi üretir.
Bu seçenek, diğer makinelere dağıtılmak üzere statik kütüphaneler derlenirken kullanılmamalıdır; çünkü hata ayıklama bilgisi, kütüphanedeki nesne dosyalarının derlendiği makinedeki modül önbelleğine referanslar içerecektir.
-fstandalone-debug -fno-standalone-debug Clang, ikili dosyadaki hata ayıklama bilgisinin boyutunu azaltmak için bir dizi optimizasyonu destekler. Bu optimizasyonlar, hata ayıklama türü bilgisinin birden fazla derleme birimine yayılabileceği varsayımına dayanarak çalışır. Örneğin Clang, bir modülün ihtiyaç duymadığı ve bir ileri bildirim (forward declaration) ile değiştirilebilecek türler için tür tanımları üretmeyecektir. Ayrıca Clang, dinamik bir C++ sınıfı için yalnızca o sınıfın sanal tablosunu (vtable) içeren modülde tür bilgisi üretecektir.
-fstandalone-debug seçeneği bu optimizasyonları kapatır. Bu, hata ayıklama bilgisiyle birlikte gelmeyen 3. taraf kütüphanelerle çalışırken kullanışlıdır. Bu seçenek Darwin üzerinde varsayılandır. Clang'in, program tarafından hiç referans verilmeyen türler için asla tür bilgisi üretmeyeceğini unutmayın.
-feliminate-unused-debug-types Varsayılan olarak Clang, bir programda tanımlanmış ancak kullanılmamış türler için tür bilgisi üretmez. Bu kullanılmayan türlerin hata ayıklama bilgisini korumak için, bunun tersi olan -fno-eliminate-unused-debug-types seçeneği kullanılabilir.
-fexceptions Clang ile derlenmiş yığın çerçeveleri (stack frames) üzerinden istisnaların (exceptions) fırlatılmasına izin verir (birçok hedefte bu, üzerinden bir istisna fırlatılabilecek fonksiyonlar için yığın çözme bilgisini etkinleştirecektir). Çoğu hedef için bu, C++ için varsayılan olarak etkindir.
-ftrapv İşaretli tamsayı taşması (integer overflow) hatalarını yakalamak için kod üretir. İşaretli tamsayı taşması C dilinde tanımsızdır. Bu bayrakla, bunu tespit etmek ve gerçekleştiğinde programı sonlandırmak (abort) için ekstra kod üretilir.
-fvisibility Bu bayrak, varsayılan görünürlük seviyesini ayarlar.
-fcommon, -fno-common Bu bayrak, başlatıcısı (initializer) olmayan değişkenlerin ortak bağ almasını (common linkage) belirtir. -fno-common ile devre dışı bırakılabilir.
-ftls-model=
-flto, -flto=full, -flto=thin, -emit-llvm Bağlama zamanı optimizasyonuna (link time optimization) uygun LLVM formatlarında çıktı dosyaları üretir. -S ile kullanıldığında bu, LLVM ara dil montaj dosyaları üretir, aksi takdirde LLVM bitkodu formatında nesne dosyaları üretir (bu dosyalar aşama seçim seçeneklerine bağlı olarak bağlayıcıya aktarılabilir).
-flto için varsayılan değer "full"dur; bu değerde LLVM bitkodu, bağlayıcının tüm bu modülleri optimizasyon için tek bir birleşik modülde birleştirdiği monolitik Bağlama Zamanı Optimizasyonu (LTO) için uygundur. "thin" ile bunun yerine ThinLTO derlemesi çağrılır.
NOT:
Darwin üzerinde, -flto seçeneğini -g ile birlikte kullanırken ve derleme ile bağlamayı ayrı adımlarda gerçekleştirirken, ld64 bağlayıcısına Bağlama Zamanı Optimizasyonu sırasında üretilen geçici nesne dosyasını silmemesini talimatı vermek için bağlama adımında -Wl,-object_path_lto,
Sürücü Seçenekleri
-### Bu derleme için çalıştırılacak komutları yazdırır (ancak çalıştırmaz).
--help Kullanılabilir seçenekleri görüntüler.
-Qunused-arguments Kullanılmayan sürücü argümanları için herhangi bir uyarı vermez.
-Wa,
-Wl,
-Wp,
-Xanalyzer
-Xassembler
-Xlinker
-Xpreprocessor
-o
-print-file-name=
-print-libgcc-file-name Şu anda kullanılan derleyici çalışma zamanı kütüphanesinin ("libgcc.a" veya "libclang_rt.builtins.*.a") kütüphane yolunu yazdırır.
-print-prog-name=
-print-search-dirs Kütüphaneleri ve programları bulmak için kullanılan yolları yazdırır.
-save-temps Ara derleme sonuçlarını kaydeder.
-save-stats, -save-stats=cwd, -save-stats=obj Dahili kod üretimi (LLVM) istatistiklerini geçerli dizindeki (-save-stats/"-save-stats=cwd") veya çıktı dosyasının dizinindeki ("-save-state=obj") bir dosyaya kaydeder.
İstatistik raporlamasını kontrol etmek için ortam değişkenlerini de kullanabilirsiniz. CC_PRINT_INTERNAL_STAT değerini 1 olarak ayarlamak bu özelliği etkinleştirir; rapor JSON formatında standart çıktıya (stdout) gider.
CC_PRINT_INTERNAL_STAT_FILE değerini bir dosya yoluna ayarlamak, istatistikleri JSON formatında verilen dosyaya raporlamasını sağlar.
-save-stats seçeneğinin CC_PRINT_INTERNAL_STAT ve CC_PRINT_INTERNAL_STAT_FILE değişkenlerine göre öncelikli olduğunu unutmayın.
-integrated-as, -no-integrated-as Sırasıyla entegre montajcının kullanımını etkinleştirmek ve devre dışı bırakmak için kullanılır. Entegre montajcının varsayılan olarak etkin olup olmadığı hedefe bağlıdır.
-time: Bireysel komutları süre ölçümüne tabi tutar.
-ftime-report Derlemenin her bir aşamasının zamanlama özetini yazdırır.
-v: Çalıştırılacak komutları gösterir ve ayrıntılı çıktı kullanır.
Tanı Seçenekleri
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length Bu seçenekler, Clang'in tanılar (hatalar ve uyarılar) hakkındaki bilgileri nasıl yazdıracağını kontrol eder. Daha fazla bilgi için lütfen Clang Kullanıcı Kılavuzu'na bakın.
Ön İşlemci Seçenekleri
-D
-U
-include
-I
-F
-nostdinc Başlık dosyaları için standart sistem dizinlerini veya derleyici yerleşik dizinlerini aramaz.
-nostdlibinc Başlık dosyaları için standart sistem dizinlerini aramaz, ancak derleyici yerleşik başlık dizinlerini arar.
-nobuiltininc Başlık dosyaları için clang'in yerleşik dizinini aramaz.
-nostdinc++ Başlık dosyaları için sistem C++ standart kütüphane dizinini aramaz.
-fkeep-system-includes Yalnızca -E ile kullanılabilir. "Sistem" başlıklarının önceden işlenmiş içeriğini çıktıya kopyalamaz; bunun yerine #include yönergesini korur. Bu, -E tarafından üretilen metin miktarını büyük ölçüde azaltabilir; bu da "küçük" ve yeniden üretilebilir bir test senaryosu oluşturmaya çalışırken yardımcı olabilir.
Ancak bu seçenek yeniden üretilebilirliği garanti etmez. Eğer dahil eden kaynak kod, sistem başlıklarının davranışını etkileyen ön işlemci sembolleri tanımlıyorsa (örneğin _XOPEN_SOURCE), -E işlemi bu tanımı kaldıracaktır ve bu nedenle dahil edilen başlığın anlambilimini değiştirebilir. Ayrıca, sistem başlıklarının farklı bir sürümünün (özellikle STL'in farklı bir sürümünün) kullanılması farklı bir davranışla sonuçlanabilir. Önceden işlenmiş dosyayı her zaman ayrı olarak derleyerek doğrulayın.
Environment
TMPDIR, TEMP, TMP Bu ortam değişkenleri, derleme işlemi sırasında kullanılan geçici dosyaların yazılacağı konum için sırasıyla kontrol edilir.
CPATH Bu ortam değişkeni, dahil edilen başlık dosyalarını bulmak için kullanılacak ek (sistem dışı) başlık arama yollarını belirtir. Bu yollar, -I
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH Bu ortam değişkenleri, ilgili dil işlenirken kullanılacak ek sistem başlık dosyası arama yollarını belirtir. Arama yolları, CPATH ortam değişkeninde olduğu gibi sınırlandırılır.
MACOSX_DEPLOYMENT_TARGET Eğer -mmacos-version-min belirtilmemişse, varsayılan hedef sürüm bu ortam değişkeninden okunur. Bu seçenek yalnızca Darwin hedeflerini etkiler.
Bugs
Hataları bildirmek için lütfen https://github.com/llvm/llvm-project/issues/ adresini ziyaret edin. Çoğu hata raporu, önceden işlenmiş kaynak dosyaları (-E seçeneğini kullanın) ve derleyicinin tam çıktısını, yeniden üretme bilgileriyle birlikte içermelidir.
See Also
as(1), ld(1)
Author
Clang / LLVM Ekibi tarafından sürdürülmektedir (http://clang.llvm.org)
Copyright
2007-2026, The Clang Ekibi
11 13 Şubat 2026 CLANG(1)