Özet
clang [seçenekler] dosya_adı ...
Açıklama
clang; ön işleme (preprocessing), ayrıştırma (parsing), optimizasyon, kod üretimi, montaj (assembly) ve bağlamayı (linking) kapsayan bir C, C++ ve Objective-C derleyicisidir. Hangi üst seviye mod ayarının geçildiğine 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ı kavramak önemlidir. Bu aşamalar şunlardır:
Sürücü (Driver): 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.
Ön İşleme (Preprocessing): 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.
Ayrıştırma ve Anlamsal Analiz (Parsing and Semantic Analysis): 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 geldikten sonra, ifadelerin türlerini hesaplamak ve kodun düzgün biçimlendirilip biçimlendirilmediğini belirlemek için anlamsal analiz uygular. Bu aşama, ayrıştırma hatalarının yanı sıra derleyici uyarılarının çoğunun üretilmesinden de sorumludur. Bu aşamanın çıktısı bir "Soyut Sözdizimi Ağacı"dır (Abstract Syntax Tree - AST).
Kod Üretimi ve Optimizasyon (Code Generation and Optimization): 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 yönetilmesinden sorumludur. Bu aşamanın çıktısı genellikle ".s" dosyası veya "montaj" (assembly) dosyası olarak adlandırılır.
Clang ayrıca, kod oluşturucunun doğrudan nesne (object) dosyaları ürettiği entegre bir montajcının kullanımını da destekler. Bu, ".s" dosyasının oluşturulması ve hedef montajcının çağrılması yükünü ortadan kaldırır.
Montajcı (Assembler): Bu aşama, derleyicinin çıktısını 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.
Bağlayıcı (Linker): Bu aşama, birden fazla nesne dosyasını 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 bir "a.out", ".dylib" veya ".so" dosyasıdır.
Clang Statik Analiz Aracı (Clang Static Analyzer)
Clang Statik Analiz Aracı, kod analizi yoluyla hataları bulmak amacıyla kaynak kodu tarayan bir araçtır. Bu araç Clang'in birçok parçasını kullanır ve aynı sürücünün içine yerleştirilmiştir. Statik analiz aracının nasıl kullanılacağına ilişkin daha fazla ayrıntı için lütfen https://clang-analyzer.llvm.org adresini ziyaret edin.
Seçenekler
Aşama Seçim Seçenekleri
-E: Ön işlemci aşamasını çalıştırır.
-fsyntax-only Ön işlemci, ayrıştırıcı ve anlamsal analiz aşamalarını çalıştırır.
-S: Önceki aşamaların yanı sıra LLVM üretimi, optimizasyon aşamalarını ve hedefe özel kod üretimini çalıştırarak bir montaj dosyası üretir.-c: Yukarıdakilerin tümünü ve montajcıyı çalıştırarak bir hedef ".o" nesne dosyası oluşturur.
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
Değişiklik 1 ile ISO C 1990 gnu89 gnu90
GNU uzantılarıyla ISO C 1990 c99 iso9899:1999
ISO C 1999 gnu99
GNU uzantılarıyla ISO C 1999 c11 iso9899:2011
ISO C 2011 gnu11
GNU uzantılarıyla ISO C 2011 c17 iso9899:2017
ISO C 2017 gnu17
GNU uzantılarıyla ISO C 2017 c23 iso9899:2024
ISO C 2023 gnu23
GNU uzantılarıyla ISO C 2023 c2y
ISO C 202y gnu2y
GNU uzantılarıyla ISO C 202y
PS4 hariç (burada gnu99'dur), varsayılan C dili standardı gnu17'dir.
C++ dili için desteklenen değerler şunlardır: c++98 c++03
Değişikliklerle ISO C++ 1998 gnu++98 gnu++03
Değişiklikler ve GNU uzantılarıyla ISO C++ 1998 c++11
Değişikliklerle ISO C++ 2011 gnu++11
Değişiklikler ve GNU uzantılarıyla ISO C++ 2011 c++14
Değişikliklerle ISO C++ 2014 gnu++14
Değişiklikler ve GNU uzantılarıyla ISO C++ 2014 c++17
Değişikliklerle ISO C++ 2017 gnu++17
Değişiklikler ve GNU uzantılarıyla ISO C++ 2017 c++20
Değişikliklerle ISO C++ 2020 gnu++20
Değişiklikler ve GNU uzantılarıyla ISO C++ 2020 c++23
Değişikliklerle ISO C++ 2023 gnu++23
Değişiklikler ve GNU uzantılarıyla 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 işler.
-trigraphs Üçlü harfleri (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 tanınmış kütüphane fonksiyonlarının özel olarak işlenmesini ve optimize edilmesini devre dışı bırakır.
-fno-builtin-
-fno-builtin-std-
C++ standart kütüphanesinin de std isim alanında sunduğu C standart kütüphane fonksiyonları için bunun yerine -fno-builtin-
-fmath-errno Matematik fonksiyonlarının errno değerini güncelleyecek şekilde değerlendirilmesi 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 cl.exe'nin yüklü olan sürümüyle aynı değere ya da 1933 değerine ayarlanır. Diğer durumlarda ayarlanmaz.
-fborland-extensions Borland uzantıları için desteği etkinleştirir.
-fwritable-strings Tüm dizgi sabitlerini 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 hiçbir ö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üştürmelerine (bitcast) izin verir
• all: aynı genel bit genişliğine sahip herhangi bir vektör arasında örtük bit dönüştürmelerine izin verir
Belirtilmemişse
-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 (non-fragile ABI 2)'tür.
-fobjc-nonfragile-abi-version=
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi Objective-C non-fragile ABI kullanımını etkinleştirir. Bunun varsayılan ABI 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 seçeneğinin bir takma adı olarak işlev görür.
-mcpu=help, -mtune=help --print-supported-cpus seçeneğinin bir takma adı olarak işlev görür.
-march=
--print-enabled-extensions --target, -march ve -mcpu değerlerinin kombinasyonuyla belirtilen hedef için etkinleştirilmiş 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ştirilen 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 oluşturur.
-O1 -O0 ile -O2 arasında bir yerdedir.
-O2 Çoğu optimizasyonu etkinleştiren orta düzeyde optimizasyondur.
-O3 -O2 gibidir, ancak yürütülmesi 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ıyla kesin uyumluluğu 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 kombinasyon halinde -O3 kullanılması gerektiğine dair bir uyarı verilir. Kaldırılması için henüz bir zaman çizelgesi yoktur; amaç, bir optimizasyon bayrağının doğru kodun gözlemlenebilir davranışını değiştiren ş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 optimizasyonu biraz azaltılmıştır ve daha iyi değişken görünürlüğü sağlar. -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 bilgilerinin en iyi -O0 seviyesinde çalıştığını unutmayın. -g ile başlayan birden fazla seçenek belirtildiğinde, son belirtilen geçerli olur: -g Hata ayıklama bilgiisi oluşturur.
-gline-tables-only Yalnızca satır tablosu hata ayıklama bilgileri oluşturur. Bu, satır içi ekleme (inlining) bilgileriyle sembolize edilmiş geri izlemelere (backtrace) olanak tanır, 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ü bilgileri aktarmak yerine, Clang modüllerinde veya önceden derlenmiş başlıklarda tanımlanan türlere harici referanslar içeren hata ayıklama bilgileri oluşturur. Bu seçenek, Clang modül formatını, Clang modülünü hata ayıklama bilgileriyle birlikte tutan nesne dosyası kapsayıcılarına şeffaf bir şekilde geçirir. Clang modüllerini 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 bilgileri üretir.
Bu seçenek, diğer makinelere dağıtılacak 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 bilgilerinin boyutunu azaltmak için bir dizi optimizasyonu destekler. Bu optimizasyonlar, hata ayıklama türü bilgilerinin birden fazla derleme birimine yayılabileceği varsayımına dayanarak çalışır. Örneğin Clang, bir modül için gerekli olmayan ve ileriye dönük bir bildirimle (forward declaration) 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 sınıfın sanal tablosunu (vtable) içeren modüldeki tür bilgilerini üretecektir.
-fstandalone-debug seçeneği bu optimizasyonları kapatır. Bu, hata ayıklama bilgisi içermeyen 3. taraf kütüphanelerle çalışırken kullanışlıdır. Darwin üzerinde varsayılan budur. Clang'in, program tarafından hiç referans verilmeyen türler için hiçbir zaman tür bilgiisi ü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ürler için hata ayıklama bilgilerini korumak amacıyla, bunun tersi olan -fno-eliminate-unused-debug-types seçeneği kullanılabilir.
-fexceptions İstisnaların (exceptions), Clang ile derlenmiş yığın çerçevelerinden (stack frames) fırlatılmasına izin verir (birçok hedefte bu, içinden bir istisna fırlatılabilecek fonksiyonlar için yığın çözme [unwind] bilgisini etkinleştirecektir). Çoğu hedefte bu, C++ için varsayılan olarak etkindir.
-ftrapv Tamsayı taşması (integer overflow) hatalarını yakalamak için kod oluşturur. İşaretli tamsayı taşması C'de 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 (visibility) seviyesini ayarlar.
-fcommon, -fno-common Bu bayrak, başlatıcısı (initializer) olmayan değişkenlerin ortak bağ (common linkage) alacağını 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ı oluşturur. -S ile kullanıldığında bu, LLVM ara dil montaj dosyaları üretir; aksi takdirde LLVM bit kodu formatında nesne dosyaları üretir (bu dosyalar aşama seçim seçeneklerine bağlı olarak bağlayıcıya geçilebilir).
-flto için varsayılan değer "full"dur; burada LLVM bit kodu, bağlayıcının optimizasyon için bu tür tüm modülleri tek bir birleştirilmiş 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 ile birlikte -g kullanıldığında ve derleme ile bağlama adımları ayrı ayrı yapıldığında, ld64 bağlayıcısına Bağlama Zamanı Optimizasyonu sırasında oluşturulan geçici nesne dosyasını silmemesini bildirmek 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 belirtilen 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ı 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ın süresini ölçer.
-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ı (verbose) kullanır.
Teşhis 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 teşhisler (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 Include dosyaları için standart sistem dizinlerini veya derleyicinin yerleşik (builtin) dizinlerini aramayı devre dışı bırakır.
-nostdlibinc Include dosyaları için standart sistem dizinlerini aramayı devre dışı bırakır, ancak derleyicinin yerleşik include dizinlerini aramaya devam eder.
-nobuiltininc Include dosyaları için clang'in yerleşik dizinini aramayı devre dışı bırakır.
-nostdinc++ Include dosyaları için sistemin C++ standart kütüphane dizinini aramayı devre dışı bırakır.
-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 hacmini büyük ölçüde azaltabilir; bu da "küçük", yeniden üretilebilir bir test senaryosu üretmeye çalışırken yardımcı olabilir.
Ancak bu seçenek yeniden üretilebilirliği garanti etmez. Eğer dahil eden kaynak, 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 dolayısıyla dahil edilen başlığın anlambilimini (semantics) değiştirebilir. Ayrıca, sistem başlıklarının farklı bir sürümünü (özellikle STL'nin farklı bir sürümünü) kullanmak farklı davranışlara neden olabilir. Önceden işlenmiş dosyayı her zaman ayrı olarak derleyerek doğrulayın.
Ortam
TMPDIR, TEMP, TMP Bu ortam değişkenleri, derleme işlemi sırasında kullanılan geçici dosyaların yazılacağı konumu bulmak 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şkenindeki gibi sınırlandırılır.
MACOSX_DEPLOYMENT_TARGET Eğer -mmacos-version-min belirtilmemişse, varsayılan hedef dağıtım sürümü bu ortam değişkeninden okunur. Bu seçenek yalnızca Darwin hedeflerini etkiler.
Hatalar (Bugs)
Hataları bildirmek için lütfen https://github.com/llvm/llvm-project/issues/ adresini ziyaret edin. Çoğu hata bildirimi, yeniden üretme bilgileriyle birlikte önceden işlenmiş kaynak dosyaları (-E seçeneğini kullanın) ve derleyicinin tam çıktısını içermelidir.
Ayrıca Bakınız
as(1), ld(1)
Yazar
Clang / LLVM Ekibi tarafından sürdürülmektedir (http://clang.llvm.org)
Telif Hakkı
2007-2026, Clang Ekibi
11 13 Şubat 2026 CLANG(1)