← man/dev_and_programming
clang — man clang — 80×24
ugur@toprak:~/man/dev_and_programming$man clang
Bölüm 1 Geliştirme & Programlama

clang

Clang C, C++ ve Objective-C derleyicisi

Ö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 Sonraki girdi dosyalarını belirtilen dil türündeymiş gibi işler.

-std= Derlemenin yapılacağı dil standardını belirtir.

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= Kullanılacak C++ standart kütüphanesini belirtir; desteklenen seçenekler libstdc++ ve libc++'tır. Belirtilmezse, platform varsayılanı kullanılır.

-rtlib= Kullanılacak derleyici çalışma zamanı kütüphanesini belirtir; desteklenen seçenekler libgcc ve compiler-rt'dir. Belirtilmezse, platform varsayılanı kullanılır.

  • -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- Belirli bir kütüphane fonksiyonu için özel işlemeyi ve optimizasyonları devre dışı bırakır. Örneğin, -fno-builtin-strlen, strlen() kütüphane fonksiyonuna yönelik her türlü özel işlemeyi kaldırır.

-fno-builtin-std- std isim alanındaki (namespace) belirli bir C++ standart kütüphane fonksiyonu için özel işlemeyi ve optimizasyonları devre dışı bırakır. Örneğin, -fno-builtin-std-move_if_noexcept, std::move_if_noexcept() kütüphane fonksiyonuna yönelik her türlü özel işlemeyi kaldırır.

C++ standart kütüphanesinin de std isim alanında sunduğu C standart kütüphane fonksiyonları için bunun yerine -fno-builtin- kullanın.

-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=, -fno-lax-vector-conversions Örtük vektör dönüşümleri için gevşek tür denetimi kurallarına izin verir. için olası değerler:

• 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 varsayılan olarak integer olur.

-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= Varsayılan olarak kullanılacak Objective-C non-fragile ABI sürümünü seçer. Bu, yalnızca non-fragile ABI etkinleştirildiğinde (ister -fobjc-nonfragile-abi ile, ister platform varsayılanı olduğu için) Objective-C ABI olarak kullanılacaktır.

-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 Derlemenin yapılacağı mimariyi belirtir (Mac OS X'e özgüdür).

-target Derlemenin yapılacağı mimariyi belirtir (tüm platformlar).

-mmacos-version-min= macOS için derleme yaparken, uygulamanız tarafından desteklenen minimum sürümü belirtir.

-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= veya -arch ile belirtilen) desteklenen işlemcilerin bir listesini yazdırır. Herhangi bir hedef belirtilmemişse, sistemin varsayılan hedefi kullanılır.

-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= Clang'in belirli bir işlemci ailesi üyesi ve sonrası için kod üretmesi gerektiğini belirtir. Örneğin, -march=i486 belirtirseniz, derleyicinin i486 ve sonraki işlemcilerde geçerli olan ancak daha önceki işlemcilerde bulunmayabilecek talimatlar üretmesine izin verilir.

--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= veya -arch ile belirtilen) her CPU hedefinde desteklenen tüm uzantıların listesini yazdırır. Herhangi bir hedef belirtilmemişse, sistem varsayılan hedefi kullanılır. Şu anda bu seçenek yalnızca AArch64 ve RISC-V üzerinde desteklenmektedir.

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= İş parçacığına özel (thread-local) değişkenler için kullanılacak varsayılan iş parçacığına özel depolama (TLS) modelini ayarlar. Geçerli değerler şunlardır: "global-dynamic", "local-dynamic", "initial-exec" ve "local-exec". Varsayılan değer "global-dynamic"tir. Varsayılan model, tls_model özniteliğiyle (attribute) geçersiz kılınabilir. Derleyici, mümkünse daha verimli bir model seçmeye çalışacaktır.

-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,.o seçeneğini de geçmeniz gerekir (derleme ve bağlama tek bir adımda yapılıyorsa bu bayrak Clang tarafından bağlayıcıya otomatik olarak geçilir). Bu, yürütülebilir dosyada hata ayıklamaya ve dsymutil(1) kullanarak .dSYM paketini oluşturmaya olanak tanır.

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, args içindeki virgülle ayrılmış argümanları montajcıya (assembler) geçirir.

-Wl, args içindeki virgülle ayrılmış argümanları bağlayıcıya (linker) geçirir.

-Wp, args içindeki virgülle ayrılmış argümanları ön işlemciye (preprocessor) geçirir.

-Xanalyzer arg değerini statik analiz aracına geçirir.

-Xassembler arg değerini montajcıya geçirir.

-Xlinker arg değerini bağlayıcıya geçirir.

-Xpreprocessor arg değerini ön işlemciye geçirir.

-o Çıktıyı belirtilen dosyaya yazar.

-print-file-name= Belirtilen dosyanın tam kütüphane yolunu yazdırır.

-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= Belirtilen ismin tam program yolunu yazdırır.

-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= Kaynak dosya ön işlemeden geçirilmeden önce okunan ön tanımlar arabelleğine (predefines buffer) örtük bir #define ekler.

-U Kaynak dosya ön işlemeden geçirilmeden önce okunan ön tanımlar arabelleğine örtük bir #undef ekler.

-include Kaynak dosya ön işlemeden geçirilmeden önce okunan ön tanımlar arabelleğine örtük bir #include ekler.

-I Belirtilen dizini include dosyaları için arama yoluna ekler.

-F Belirtilen dizini framework include dosyaları için arama yoluna ekler.

-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 seçeneğiyle belirtilen yollardan sonra, ancak herhangi bir sistem başlığı arama yolundan önce aranır. Yollar, PATH ortam değişkeninde kullanılan platforma bağlı sınırlayıcı ile ayrılır. Sınırlanmış yol listesindeki boş girişler (listenin başındaki veya sonundakiler dahil), derleyicinin geçerli çalışma dizinini belirtiyor gibi değerlendirilir.

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)