# NAME

clang - the Clang C and Objective-C compiler

# SYNOPSIS

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

# DESCRIPTION

clang is a C and Objective-C compiler which encompasses preprocessing, parsing, optimization, code generation, assembly, and linking. Depending on which high-level mode setting is passed, Clang will stop before doing a full link. While Clang is highly integrated, it is important to understand the stages of compilation, to understand how to invoke it. These stages are:

Driver

  The clang executable is actually a small driver which controls the overall execution of other tools such as the compiler, assembler and linker. Typically you do not need to interact with the driver, but you transparently use it to run the other tools.

Preprocessing

  This stage handles tokenization of the input source file, macro expansion, #include expansion and handling of other preprocessor directives. The output of this stage is typically called a ".i" (for C) or ".mi" (for Objective-C) file.

Parsing and Semantic Analysis

  This stage parses the input file, translating preprocessor tokens into a parse tree. Once in the form of a parser tree, it applies semantic analysis to compute types for expressions as well and determine whether the code is well formed. This stage is responsible for generating most of the compiler warnings as well as parse errors. The output of this stage is an "Abstract Syntax Tree" (AST).

Code Generation and Optimization

  This stage translates an AST into low-level intermediate code or machine code (depending on the optimization level). This phase is responsible for optimizing the generated code and handling target-specfic code generation. The output of this stage is typically called a ".s" file.

Assembly

  This stage runs the target assembler to translate the output of the compiler into a target object file. The output of this stage is typically called a ".o" file.

Linking

  This stage runs the target linker to merge multiple object files into an executable or dynamic library. The output of this stage is typically called an "a.out", ".dylib" or ".so" file.

The Clang compiler supports a large number of options to control each of these stages.

# OPTIONS

## Stage Selection Options

--help

  Display available options.

-###

  Print the commands to run for this compilation.

-E

  Only run the preprocessor.

-S

  Only run preprocess and compilation steps.

-c

  Only run preprocess, compile, and assemble steps.

-emit-llvm

  Use the LLVM representation for assembler and object files.

--analyze

  Run the static analyzer. =item -ObjC++

  Treat source input files as Objective-C++ inputs.

-ObjC

  Treat source input files as Objective-C inputs.

-Qunused-arguments

  Don't emit warning for unused driver arguments.

-Wa,args

  Pass the comma separated arguments in args to the assembler.

-Wl,args

  Pass the comma separated arguments in args to the linker.

-Wp,args

  Pass the comma separated arguments in args to the preprocessor.

-Xanalyzer arg

  Pass arg to the static analyzer.

-Xassembler arg

  Pass arg to the assembler.

-Xclang arg

  Pass arg to the clang compiler.

-Xlinker arg

  Pass arg to the linker.

-Xpreprocessor arg

  Pass arg to the preprocessor.

-o file

  Write output to file.

-pipe

  Use pipes between commands, when possible.

-print-file-name=file

  Print the full library path of file.

-print-libgcc-file-name

  Print the library path for "libgcc.a".

-print-prog-name=name

  Print the full program path of name.

-print-search-dirs

  Print the paths used for finding libraries and programs.

-save-temps

  Save intermediate compilation results.

-time

  Time individual commands.

-v

  Show commands to run and use verbose output.

-x language

  Treat subsequent input files as having type language.

# ENVIRONMENT

FIXME: Fill in environment.

# BUGS

It is inconceivable that Clang may have a bug.

# SEE ALSO

FIXME: See also?

# AUTHOR

Maintained by the Clang / LLVM Team (http://clang.llvm.org).