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

c++

Clang C, C++ ve Objective-C derleyicisi

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 Sonraki girdi dosyalarını belirtilen dilde (language) kabul eder.

-std= Derleme yapılacak dil standardını belirtir.

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= 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 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- Belirli kütüphane fonksiyonu için özel işlemi ve optimizasyonları devre dışı bırakır. Örneğin, -fno-builtin-strlen, strlen() kütüphane fonksiyonu için tüm özel işlemleri kaldırır.

-fno-builtin-std- std ad alanındaki (namespace) belirli C++ standart kütüphane fonksiyonu için özel işlemi ve optimizasyonları devre dışı bırakır. Örneğin, -fno-builtin-std-move_if_noexcept, std::move_if_noexcept() kütüphane fonksiyonu için tüm özel işlemleri kaldırır.

C++ standart kütüphanesinin std ad alanında da sağladığı C standart kütüphane fonksiyonları için bunun yerine -fno-builtin- kullanın.

-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=, -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 şunlardır:

• 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 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'tür (non-fragile ABI 2).

-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 aracılığıyla, ister platform varsayılanı olduğu için) Objective-C ABI olarak kullanılır.

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

-target Derleme yapılacak mimariyi belirtir (tüm platformlar için).

-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 aracılığıyla belirtilen) desteklenen işlemcilerin listesini yazdırır. Herhangi bir hedef belirtilmezse, sistem varsayılan hedefi kullanılır.

-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= 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 öncekilerde bulunmayan talimatlar üretmesine izin verilir.

--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= veya -arch aracılığıyla belirtilen) her CPU hedefi için desteklenen tüm uzantıların listesini yazdırır. Herhangi bir hedef belirtilmezse, 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 ü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= İş parçacığına yerel değişkenler için kullanılacak varsayılan iş parçacığına yerel 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ği ile 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ı ü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,.o seçeneğini de aktarmanız gerekir (derleme ve bağlama tek bir adımda yapılıyorsa bu bayrak Clang tarafından bağlayıcıya otomatik olarak aktarılır). Bu, yürütülebilir dosyanın hata ayıklamasına ve dsymutil(1) kullanılarak .dSYM paketinin üretilmesine 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 aktarır.

-Wl, args içindeki virgülle ayrılmış argümanları bağlayıcıya aktarır.

-Wp, args içindeki virgülle ayrılmış argümanları ön işlemciye aktarır.

-Xanalyzer arg değerini statik analizöre aktarır.

-Xassembler arg değerini montajcıya aktarır.

-Xlinker arg değerini bağlayıcıya aktarır.

-Xpreprocessor arg değerini ön işlemciye aktarır.

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

-print-file-name= Dosyanın (file) 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 program adının (name) tam 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 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= Kaynak dosya ön işlemeden geçirilmeden önce okunan ön tanımlar arabelleğine ö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, başlık (include) dosyaları için arama yoluna ekler.

-F Belirtilen dizini, framework başlık dosyaları için arama yoluna ekler.

-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 seçeneği ile belirtilen yollardan sonra, ancak herhangi bir sistem başlığı arama yolundan önce aranır. Yollar, PATH ortam değişkeninde kullanıldığı gibi 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 ele alınır.

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)

2007-2026, The Clang Ekibi

11 13 Şubat 2026 CLANG(1)