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"ファイル、または "アセンブリ"ファイルと呼ばれます。
- アセンブラ
- このステージは、コンパイラの出力をターゲットのオブジェクトファイルに変換するためにターゲットアセンブラを実行します。このステージの出力は、通常 ".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 |