EN JA
CLANG(1)
CLANG(1) Clang Tools Documentation CLANG(1)

名称

clang - Clang C、C++ と Objective-C コンパイラ

書式

clang [ -c| -S| -E] -std= standard -g
[ -O0| -O1| -O2| -Os| -Oz| -O3| -Ofast| -O4]
-W warnings... -pedantic
-I dir... -L dir...
-D macro[=defn]
-f feature-option...
-m machine-option...
-o output-file
-stdlib= library
input-filenames

解説

clang は、前処理、構文解析、最適化、コード生成、アセンブリとリンクを含む、C、C++ と Objective-C コンパイラです。どのハイレベルのモード設定が渡されるかによって、Clang は、完全なリンクを行う前に、停止します。 Clang は、高度に統合されていますがが、それを呼び出す方法を理解するために、コンパイルのステージを理解することは重要です。これらのステージは、次の通りです:
ドライバ
clang 実行形式は、コンパイラ、アセンブラとリンカのような他のツールの総合的な実行を制御する実際に小さなドライバです。通常、利用者は、ドライバと情報をやりとりする必要はありませんが、他のツールを実行するためにそれを透過的に使用します。
前処理
このステージは、入力ソースファイルのトークン化、マクロ展開、#include 展開と他のプリプロセッサ指示の取り扱いを操作します。このステージの出力は、通常、(C のための) ".i"、(C++ のための) ".ii"、(Objective-C のための) ".mi"または (Objective-C++ のための) ".mii"ファイルと呼ばれます。
構文解析とセマンティック解析
このステージは、プリプロセッサのトークンを解析ツリーに変換して、入力ファイルを解析します。いったん解析ツリーの形にすると、その上、式のためのタイプを計算するために構文解析に適用し、コードがよく形成されるかどうかを決定します。このステージは、解析エラーと同様にコンパイラの警告のほとんどを生成することに関与します。このステージの出力は、"抽象構文ツリー" (Abstract Syntax Tree) (AST) です。
コード生成と最適化
このステージは、AST を低レベルの中間コード ("LLVM IR"として知られている) に変換し、最後にマシンコードに変換します。このフェーズは、生成されたコードを最適化し、ターゲット特有のコード生成を操作することに関与します。このステージの出力は、通常 ".s"ファイル、または "アセンブリ"ファイルと呼ばれます。
 
また、Clang は、コード生成プログラムが直接オブジェクトファイルを作成する、統合アセンブラの使用をサポートします。これは、".s"ファイルを生成して、ターゲットアセンブラを呼び出すオーバヘッドを避けます。
アセンブラ
このステージは、コンパイラの出力をターゲットのオブジェクトファイルに変換するためにターゲットアセンブラを実行します。このステージの出力は、通常 ".o"ファイル、または "オブジェクト"ファイルと呼ばれます。
リンカ
このステージは、複数のオブジェクトファイルを実行形式またはダイナミックライブラリにマージするためにターゲットのリンカを実行します。このステージの出力は、通常 "a.out"、".dylib"または ".so"ファイルと呼ばれます。

Clang コンパイラは、各これらのステージを制御するために多くのオプションをサポートしています。コードのコンパイルに加えて、Clang は、他のツールもサポートしています:

clang 静的解析

Clang Static Analyzer は、コード解析を通してバグを見つけようと試みるためにソースコードをスキャンするツールです。このツールは、Clang の多くの部分を使用して、同じドライバに構築されます。

オプション

ステージ選択オプション

-E
プリプロセッサステージを実行します。
-fsyntax-only
プリプロセッサ、構文解析とタイプチェックステージを実行します。
-S
LLVM 生成と最適化のステージとターゲット特有のコード生成、アセンブリファイルの生成と同様に前のステージを実行します。
-c
上記のすべてとアセンブラ、ターゲット ".o"オブジェクトファイルの生成を実行します。
ステージ選択オプションなし
ステージ選択オプションが指定されないなら、上記のすべてのステージが実行され、リンカは、実行形式または共有ライブラリに結果を結合するために実行されます。
--analyze
Clang Static Analyzer を実行します。

言語選択とモードオプション

-x language
タイプ language があるものとして、その後の入力ファイルを扱います。
-std= language
コンパイルする言語の標準を指定します。
-stdlib= library
使用する C++ の標準ライブラリを指定します。サポートされたオプションは、libstdc++ と libc++ です。
-ansi
-std=c89 と同じです。
-ObjC++
Objective-C++ の入力としてソース入力ファイルを扱います。
-ObjC
Objective-C の入力としてソース入力ファイルを扱います。
-trigraphs
3 つ組表記 (trigraph) を有効にします。
-ffreestanding
ホスト環境ではなく、ファイルが、freestanding (独立) のためにコンパイルされるべきであることを示します。
-fno-builtin
strlen と malloc のような組み込み機能の特別な取り扱いと最適化を無効にします。
-fmath-errno
数学関数が errno を更新するものとして扱われるべきであることを示します。
-fpascal-strings
"\pfoo"で Pascal スタイルの文字列のサポートを有効にします。
-fms-extensions
Microsoft 拡張のサポートを有効にします。
-fmsc-version=
_MSC_VER を設定します。 Windows で 1300 をデフォルトとします。別の方法で設定されません。
-fborland-extensions
Borland 拡張のサポートを有効にします。
-fwritable-strings
すべての文字列のリテラルをデフォルトで書き込み可能にします。これは、文字列と他の最適化の独自化 (uniquing) を無効にします。
-flax-vector-conversions
ゆるい暗黙のベクトルの変換のためのタイプチェック規則を許可します。
-fblocks
"Blocks"言語機能を有効にします。
-fobjc-gc-only
Objective-C コードは、Objective-C Garbage Collection が有効にされるときのみ動作する、GC-only モードでコンパイルされるべきであることを示します。
-fobjc-gc
Objective-C コードは、GC と非 GC モードの両方で動作する、 hybrid-GC モードでコンパイルされるべきであることを示します。
-fobjc-abi-version= version
使用する Objective-C ABI バージョンを選択します。利用可能なバージョンは、1 (古い "fragile" ABI)、 2 (non-fragile ABI 1) と 3 (non-fragile ABI 2) です。
-fobjc-nonfragile-abi-version= version
デフォルトで使用する Objective-C non-fragile ABI バージョンを選択します。これは、non-fragile ABI が有効にされるとき、 (-fobjc-nonfragile-abi を通して、またはそれがプラットフォームのデフォルトであるので)、 Objective-C ABI としてのみ使用されます。
-fobjc-nonfragile-abi
Objective-C non-fragile ABI の使用を有効にします。これがデフォルトの ABI であるプラットフォームで、 -fno-objc-nonfragile-abi で、それを、無効にすることができます。

ターゲット選択オプション

Clang は、設計の固有の部分としてクロスコンパイルを完全にサポートします。 Clang のバージョンがどのように設定されているかによって、多くのクロスコンパイラのサポートがあるか、または固有のターゲットをサポートするだけです。
-arch architecture
構築するアーキテクチャを指定します。
-mmacosx-version-min= version
Mac OS/X のために構築するとき、アプリケーションによってサポートされた最小のバージョンを指定します。
-miphoneos-version-min
iPhone OS のために構築するとき、アプリケーションによってサポートされた最小のバージョンを指定します。
-march= cpu
Clang が特定のプロセッサのファミリメンバ以降のためにコードを生成すべきであることを指定します。例えば、-march=i486 を指定するなら、コンパイラは、 i486 以降のプロセッサで有効な命令を生成することができますが、以前のものに存在しないかもしれません。

コード生成オプション

-O0 -O1 -O2 -Os -Oz -O3 -Ofast -O4
どのくらいの最適化レベルを使用するかを指定します。 -O0 は、"最適化なし"を意味します: このレベルは、最も速くコンパイルして、最も多くデバッグ可能なコードを生成します。 -O2 は、ほとんどの最適化を有効にする適度なレベルの最適化です。 -Os は、コードサイズを減少させるための特別の最適化で -O2 に似ています。 -Oz は、 -Os (したがって、 -O2) に似ていますが、コードサイズをさらに減少させます。 -O3 は、実行するために時間がかかるか、または (プログラムをより速く実行させる試みで) より大きなコードを生成する最適化を有効することを除いて、 -O2 に似ています。 -Ofast は、言語の標準の厳密な順守に違反する、他の積極的な最適化とともに -O3 からのすべての最適化を有効にします。サポートしているプラットフォームでは、 -O4 は、リンク時間の最適化を有効にします。オブジェクトファイルは、LLVM ビットコードファイル形式で格納され、全体のプログラムの最適化は、リンク時に行われます。 -O1 は、 -O0-O2 の間のどこかです。
-g
デバッグが情報を生成します。 Clang デバッグ情報が -O0 で最もよく動作することに注意してください。より高い最適化レベルでは、行番号情報だけが、現在利用可能です。
-fexceptions
unwind 情報の生成を有効にし、これによって、スタックフレームをコンパイルした Clang を通して例外処理を実行することができます。これは、デフォルトで x86-64 をオンにします。
-ftrapv
整数オーバフローエラーを捕獲するためのコードを生成します。符号付き整数のオーバフローは、C で未定義です、このフラグで、それが起こるとき、これを検出して、アボートするように特別のコードを生成します。
-fvisibility
このフラグは、デフォルトの可視性 (visibility) レベルを設定します。
-fcommon
このフラグは、初期化子 (initializer) のない変数が共通のリンケージを得ることを指定します。 -fno-common でそれを無効にすることができます。
-ftls-model
スレッドローカル (thread-local) 変数を使用するためにデフォルトのスレッドローカル記憶域 (TLS) モデルを設定します。有効な値は、次の通りです: "global-dynamic"、"local-dynamic"、"initial-exec"と "local-exec"。デフォルトは、"global-dynamic"です。 tls_model 属性でデフォルトモデルを上書きするることができます。コンパイラは、できれば、より効率的なモデルを選択しようとします。
-flto -emit-llvm
リンク時間の最適化に適した、LLVM 形式で出力ファイルを生成します。 -S で使用されるとき、これは、LLVM 中間言語アセンブリファイルを生成し、そうでなければ、これは、 (ステージ選択オプションに依存するリンカに渡される) LLVM ビットコード形式のオブジェクトファイルを生成します。

トライバオプション

-###
このコンパイルのために実行するコマンドを印刷 (表示) します。
--help
利用可能なオプションを表示します。
-Qunused-arguments
未使用のドライバの引数のための警告を発行しません。
-Wa, args
args のコンマで区切られた引数をアセンブラに渡します。
-Wl, args
args のコンマで区切られた引数をリンカに渡します。
-Wp, args
args のコンマで区切られた引数をプリプロセッサに渡します。
-Xanalyzer arg
静的な解析プログラムに arg を渡します。
-Xassembler arg
arg をアセンブラに渡します。
-Xlinker arg
arg をリンカに渡します。
-Xpreprocessor arg
arg をプリプロセッサに渡します。
-o file
出力を file に書き込みます。
-print-file-name= file
file の完全なライブラリのパスを印刷します。
-print-libgcc-file-name
"libgcc.a"のためにライブラリのパスを印刷します。
-print-prog-name= name
name の完全なプログラムのパスを印刷します。
-print-search-dirs
ライブラリとプログラムを見つけるために使用されるパスを印刷します。
-save-temps
中間のコンパイル結果を保存します。
-integrated-as -no-integrated-as
それぞれ、統合アセンブラの使用を、有効、無効にするために使用します。統合アセンブラがデフォルトでオンであるかどうかは、ターゲットに依存します。
-time
時間個別コマンド。
-ftime-report
コンパイルの各ステージのタイミングの概要を印刷します。
-v
冗長な出力を実行して、使用するコマンドを表示します。

診断オプション

-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
これらのオプションは、Clang が診断に関する情報 (エラーと警告) をどのように印刷するかを制御します。詳しい情報については、Clang のユーザマニュアルを参照してください。

前処理オプション

-D macroname=value
暗黙の #define をソースファイルが前処理される前に読み込まれる事前定義 (predefine) バッファに追加します。
-U macroname
暗黙の #undef をソースファイルが前処理される前に読み込まれる事前定義 (predefine) バッファに追加します。
-include filename
暗黙の #include をソースファイルが前処理される前に読み込まれる事前定義 (predefine) バッファに追加します。
-I directory
指定されたディレクトリをインクルードファイルのための検索パスに追加します。
-F directory
指定されたディレクトリをフレームワークインクルードファイルのための検索パスに追加します。
-nostdinc
インクルードファイルのための標準のシステムディレクトリ、またはコンパイラの組み込みディレクトリを検索しません。
-nostdlibinc
インクルードファイルのための標準のシステムディレクトリを検索しませんが、コンパイラの組み込みディレクトリを検索します。
-nobuiltininc
インクルードファイルのための clang の組み込みディレクトリを検索しません。

環境変数

TMPDIR, TEMP, TMP
これらの環境変数は、コンパイルプロセスの間に使用される一時ファイルを書き込むための位置に対して、順番にチェックされます。
CPATH
この環境変数が存在しているなら、それは、デフォルトのシステムのインクルードのパスのリストに追加されるパスの区切られたリストとして扱われます。デリミタは、 PATH 環境変数で使用されるような、プラットフォーム依存のデリミタです。
 
環境変数の空の構成要素は、無視されます。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
これらの環境変数は、適切な言語を処理するときだけ使用される、 CPATH のように追加パスを指定します。
MACOSX_DEPLOYMENT_TARGET
-mmacosx-version-min が指定されないなら、デフォルトで配備されるターゲットは、この環境変数から読み込まれます。このオプションは、darwin ターゲットのみ影響します。

バグ

バグを報告するには、<http://llvm.org/bugs/>を訪問してください。ほとんどのバグレポートは、再現させる情報と共に、前処理されたソースファイル ( -E オプションを使用する) とコンパイラの全出力を含むべきです。

関連項目


as(1), ld(1)

作者

Clang / LLVM Team (<http://clang.llvm.org>) によってメンテナンスされています。
2013-06-10 clang 3.3