CLANG, CLANG++, CLANG-CPP(1) Clang CLANG, CLANG++, CLANG-CPP(1)

CLANG, CLANG++, CLANG-CPP(1) Clang CLANG, CLANG++, CLANG-CPP(1) #

CLANG, CLANG++, CLANG-CPP(1) Clang CLANG, CLANG++, CLANG-CPP(1)

NNAAMMEE #

 clang, clang++, clang-cpp - the Clang C, C++, and Objective-C compiler

SSYYNNOOPPSSIISS #

 ccllaanngg [_o_p_t_i_o_n_s] _f_i_l_e_n_a_m_e _._._.

DDEESSCCRRIIPPTTIIOONN #

 ccllaanngg is a C, 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:

 DDrriivveerr 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.

 PPrreepprroocceessssiinngg
        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), ".ii" (for C++), ".mi" (for Objective-C), or ".mii" (for
        Objective-C++) file.

 PPaarrssiinngg aanndd SSeemmaannttiicc AAnnaallyyssiiss
        This stage parses the input file, translating preprocessor tokens
        into a parse tree.  Once in the form of a parse 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).

 CCooddee GGeenneerraattiioonn aanndd OOppttiimmiizzaattiioonn
        This stage translates an AST into low-level intermediate code
        (known as "LLVM IR") and ultimately to machine code.  This phase
        is responsible for optimizing the generated code and handling
        target-specific code generation.  The output of this stage is
        typically called a ".s" file or "assembly" file.

        Clang also supports the use of an integrated assembler, in which
        the code generator produces object files directly. This avoids the
        overhead of generating the ".s" file and of calling the target
        assembler.

 AAsssseemmbblleerr
        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 or "object" file.

 LLiinnkkeerr 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.

 CCllaanngg SSttaattiicc AAnnaallyyzzeerr

 The Clang Static Analyzer is a tool that scans source code to try to find
 bugs through code analysis.  This tool uses many parts of Clang and is
 built into the same driver.  Please see <_h_t_t_p_s_:_/_/_c_l_a_n_g_-_a_n_a_l_y_z_e_r_._l_l_v_m_._o_r_g>
 for more details on how to use the static analyzer.

OOPPTTIIOONNSS #

SSttaaggee SSeelleeccttiioonn OOppttiioonnss

 --EE     Run the preprocessor stage.

 --ffssyynnttaaxx--oonnllyy
        Run the preprocessor, parser and semantic analysis stages.

 --SS     Run the previous stages as well as LLVM generation and
        optimization stages and target-specific code generation, producing
        an assembly file.

 --cc     Run all of the above, plus the assembler, generating a target ".o"
        object file.

 nnoo ssttaaggee sseelleeccttiioonn ooppttiioonn
        If no stage selection option is specified, all stages above are
        run, and the linker is run to combine the results into an
        executable or shared library.

LLaanngguuaaggee SSeelleeccttiioonn aanndd MMooddee OOppttiioonnss

 --xx <<llaanngguuaaggee>>
        Treat subsequent input files as having type language.

 --ssttdd==<<ssttaannddaarrdd>>
        Specify the language standard to compile for.

        Supported values for the C language are:
           cc8899
           cc9900
           iissoo99889999::11999900

ISO C 1990 #

           iissoo99889999::119999440099

              ISO C 1990 with amendment 1
           ggnnuu8899
           ggnnuu9900

              ISO C 1990 with GNU extensions
           cc9999
           iissoo99889999::11999999

ISO C 1999 #

           ggnnuu9999

              ISO C 1999 with GNU extensions
           cc1111
           iissoo99889999::22001111

ISO C 2011 #

           ggnnuu1111

              ISO C 2011 with GNU extensions
           cc1177
           iissoo99889999::22001177

ISO C 2017 #

           ggnnuu1177

              ISO C 2017 with GNU extensions

        The default C language standard is ggnnuu1177, except on PS4, where it
        is ggnnuu9999.

        Supported values for the C++ language are:
           cc++++9988
           cc++++0033

              ISO C++ 1998 with amendments
           ggnnuu++++9988
           ggnnuu++++0033

              ISO C++ 1998 with amendments and GNU extensions
           cc++++1111

              ISO C++ 2011 with amendments
           ggnnuu++++1111

              ISO C++ 2011 with amendments and GNU extensions
           cc++++1144

              ISO C++ 2014 with amendments
           ggnnuu++++1144

              ISO C++ 2014 with amendments and GNU extensions
           cc++++1177

              ISO C++ 2017 with amendments
           ggnnuu++++1177

              ISO C++ 2017 with amendments and GNU extensions
           cc++++2200

              ISO C++ 2020 with amendments
           ggnnuu++++2200

              ISO C++ 2020 with amendments and GNU extensions
           cc++++22bb

              Working draft for ISO C++ 2023
           ggnnuu++++22bb

              Working draft for ISO C++ 2023 with GNU extensions

        The default C++ language standard is ggnnuu++++1177.

        Supported values for the OpenCL language are:
           ccll11..00

              OpenCL 1.0
           ccll11..11

              OpenCL 1.1
           ccll11..22

              OpenCL 1.2
           ccll22..00

              OpenCL 2.0

        The default OpenCL language standard is ccll11..00.

        Supported values for the CUDA language are:
           ccuuddaa

              NVIDIA CUDA(tm)

 --ssttddlliibb==<<lliibbrraarryy>>
        Specify the C++ standard library to use; supported options are
        libstdc++ and libc++. If not specified, platform default will be
        used.

 --rrttlliibb==<<lliibbrraarryy>>
        Specify the compiler runtime library to use; supported options are
        libgcc and compiler-rt. If not specified, platform default will be
        used.

 --aannssii  Same as -std=c89.

 --OObbjjCC,, --OObbjjCC++++
        Treat source input files as Objective-C and Object-C++ inputs
        respectively.

 --ttrriiggrraapphhss
        Enable trigraphs.

 --ffffrreeeessttaannddiinngg
        Indicate that the file should be compiled for a freestanding, not
        a hosted, environment. Note that it is assumed that a freestanding
        environment will additionally provide _m_e_m_c_p_y, _m_e_m_m_o_v_e, _m_e_m_s_e_t and
        _m_e_m_c_m_p implementations, as these are needed for efficient codegen
        for many programs.

 --ffnnoo--bbuuiillttiinn
        Disable special handling and optimizations of well-known library
        functions, like ssttrrlleenn(()) and mmaalllloocc(()).

 --ffnnoo--bbuuiillttiinn--<<ffuunnccttiioonn>>
        Disable special handling and optimizations for the specific
        library function.  For example, --ffnnoo--bbuuiillttiinn--ssttrrlleenn removes any
        special handling for the ssttrrlleenn(()) library function.

 --ffnnoo--bbuuiillttiinn--ssttdd--<<ffuunnccttiioonn>>
        Disable special handling and optimizations for the specific C++
        standard library function in namespace ssttdd. For example,
        --ffnnoo--bbuuiillttiinn--ssttdd--mmoovvee__iiff__nnooeexxcceepptt removes any special handling for
        the ssttdd::::mmoovvee__iiff__nnooeexxcceepptt(()) library function.

        For C standard library functions that the C++ standard library
        also provides in namespace ssttdd, use _-_f_n_o_-_b_u_i_l_t_i_n_-_<_f_u_n_c_t_i_o_n_>
        instead.

 --ffmmaatthh--eerrrrnnoo
        Indicate that math functions should be treated as updating eerrrrnnoo.

 --ffppaassccaall--ssttrriinnggss
        Enable support for Pascal-style strings with "\pfoo".

 --ffmmss--eexxtteennssiioonnss
        Enable support for Microsoft extensions.

 --ffmmsscc--vveerrssiioonn==
        Set _MSC_VER. Defaults to 1300 on Windows. Not set otherwise.

 --ffbboorrllaanndd--eexxtteennssiioonnss
        Enable support for Borland extensions.

 --ffwwrriittaabbllee--ssttrriinnggss
        Make all string literals default to writable.  This disables
        uniquing of strings and other optimizations.

 --ffllaaxx--vveeccttoorr--ccoonnvveerrssiioonnss,, --ffllaaxx--vveeccttoorr--ccoonnvveerrssiioonnss==<<kkiinndd>>,,
 --ffnnoo--llaaxx--vveeccttoorr--ccoonnvveerrssiioonnss
        Allow loose type checking rules for implicit vector conversions.
        Possible values of <kind>:

        • nnoonnee: allow no implicit conversions between vectors

        • iinntteeggeerr: allow implicit bitcasts between integer vectors of the
          same overall bit-width

        • aallll: allow implicit bitcasts between any vectors of the same
          overall bit-width

        <kind> defaults to iinntteeggeerr if unspecified.

 --ffbblloocckkss
        Enable the "Blocks" language feature.

 --ffoobbjjcc--aabbii--vveerrssiioonn==vveerrssiioonn
        Select the Objective-C ABI version to use. Available versions are
        1 (legacy "fragile" ABI), 2 (non-fragile ABI 1), and 3
        (non-fragile ABI 2).

 --ffoobbjjcc--nnoonnffrraaggiillee--aabbii--vveerrssiioonn==<<vveerrssiioonn>>
        Select the Objective-C non-fragile ABI version to use by default.
        This will only be used as the Objective-C ABI when the non-fragile
        ABI is enabled (either via _-_f_o_b_j_c_-_n_o_n_f_r_a_g_i_l_e_-_a_b_i, or because it is
        the platform default).

 --ffoobbjjcc--nnoonnffrraaggiillee--aabbii,, --ffnnoo--oobbjjcc--nnoonnffrraaggiillee--aabbii
        Enable use of the Objective-C non-fragile ABI. On platforms for
        which this is the default ABI, it can be disabled with
        _-_f_n_o_-_o_b_j_c_-_n_o_n_f_r_a_g_i_l_e_-_a_b_i.

TTaarrggeett SSeelleeccttiioonn OOppttiioonnss Clang fully supports cross compilation as an inherent part of its design. Depending on how your version of Clang is configured, it may have support for a number of cross compilers, or may only support a native target.

 --aarrcchh <<aarrcchhiitteeccttuurree>>
        Specify the architecture to build for (Mac OS X specific).

 --ttaarrggeett <<aarrcchhiitteeccttuurree>>
        Specify the architecture to build for (all platforms).

 --mmmmaaccoossxx--vveerrssiioonn--mmiinn==<<vveerrssiioonn>>
        When building for macOS, specify the minimum version supported by
        your application.

 --mmiipphhoonneeooss--vveerrssiioonn--mmiinn
        When building for iPhone OS, specify the minimum version supported
        by your application.

 ----pprriinntt--ssuuppppoorrtteedd--ccppuuss
        Print out a list of supported processors for the given target
        (specified through ----ttaarrggeett==<<aarrcchhiitteeccttuurree>> or _-_a_r_c_h
        <<aarrcchhiitteeccttuurree>>). If no target is specified, the system default
        target will be used.

 --mmccppuu==??,, --mmttuunnee==??
        Acts as an alias for _-_-_p_r_i_n_t_-_s_u_p_p_o_r_t_e_d_-_c_p_u_s.

 --mmaarrcchh==<<ccppuu>>
        Specify that Clang should generate code for a specific processor
        family member and later.  For example, if you specify -march=i486,
        the compiler is allowed to generate instructions that are valid on
        i486 and later processors, but which may not exist on earlier
        ones.

CCooddee GGeenneerraattiioonn OOppttiioonnss

 --OO00,, --OO11,, --OO22,, --OO33,, --OOffaasstt,, --OOss,, --OOzz,, --OOgg,, --OO,, --OO44
        Specify which optimization level to use:
           _-_O_0 Means "no optimization": this level compiles the fastest
           and generates the most debuggable code.

           _-_O_1 Somewhere between _-_O_0 and _-_O_2.

           _-_O_2 Moderate level of optimization which enables most
           optimizations.

           _-_O_3 Like _-_O_2, except that it enables optimizations that take
           longer to perform or that may generate larger code (in an
           attempt to make the program run faster).

           _-_O_f_a_s_t Enables all the optimizations from _-_O_3 along with other
           aggressive optimizations that may violate strict compliance
           with language standards.

           _-_O_s Like _-_O_2 with extra optimizations to reduce code size.

           _-_O_z Like _-_O_s (and thus _-_O_2), but reduces code size further.

           _-_O_g Like _-_O_1. In future versions, this option might disable
           different optimizations in order to improve debuggability.

           _-_O Equivalent to _-_O_1.

           _-_O_4 and higher
              Currently equivalent to _-_O_3

 --gg,, --gglliinnee--ttaabblleess--oonnllyy,, --ggmmoodduulleess
        Control debug information output.  Note that Clang debug
        information works best at _-_O_0.  When more than one option starting
        with _-_g is specified, the last one wins:
           _-_g Generate debug information.

           _-_g_l_i_n_e_-_t_a_b_l_e_s_-_o_n_l_y Generate only line table debug information.
           This allows for symbolicated backtraces with inlining
           information, but does not include any information about
           variables, their locations or types.

           _-_g_m_o_d_u_l_e_s Generate debug information that contains external
           references to types defined in Clang modules or precompiled
           headers instead of emitting redundant debug type information
           into every object file.  This option transparently switches the
           Clang module format to object file containers that hold the
           Clang module together with the debug information.  When
           compiling a program that uses Clang modules or precompiled
           headers, this option produces complete debug information with
           faster compile times and much smaller object files.

           This option should not be used when building static libraries
           for distribution to other machines because the debug info will
           contain references to the module cache on the machine the
           object files in the library were built on.

 --ffssttaannddaalloonnee--ddeebbuugg --ffnnoo--ssttaannddaalloonnee--ddeebbuugg
        Clang supports a number of optimizations to reduce the size of
        debug information in the binary. They work based on the assumption
        that the debug type information can be spread out over multiple
        compilation units.  For instance, Clang will not emit type
        definitions for types that are not needed by a module and could be
        replaced with a forward declaration.  Further, Clang will only
        emit type info for a dynamic C++ class in the module that contains
        the vtable for the class.

        The _-_f_s_t_a_n_d_a_l_o_n_e_-_d_e_b_u_g option turns off these optimizations.  This
        is useful when working with 3rd-party libraries that don't come
        with debug information.  This is the default on Darwin.  Note that
        Clang will never emit type information for types that are not
        referenced at all by the program.

 --ffeelliimmiinnaattee--uunnuusseedd--ddeebbuugg--ttyyppeess
        By default, Clang does not emit type information for types that
        are defined but not used in a program. To retain the debug info
        for these unused types, the negation
        --ffnnoo--eelliimmiinnaattee--uunnuusseedd--ddeebbuugg--ttyyppeess can be used.

 --ffeexxcceeppttiioonnss
        Enable generation of unwind information. This allows exceptions to
        be thrown through Clang compiled stack frames.  This is on by
        default in x86-64.

 --ffttrraappvv
        Generate code to catch integer overflow errors.  Signed integer
        overflow is undefined in C. With this flag, extra code is
        generated to detect this and abort when it happens.

 --ffvviissiibbiilliittyy
        This flag sets the default visibility level.

 --ffccoommmmoonn,, --ffnnoo--ccoommmmoonn
        This flag specifies that variables without initializers get common
        linkage.  It can be disabled with _-_f_n_o_-_c_o_m_m_o_n.

 --ffttllss--mmooddeell==<<mmooddeell>>
        Set the default thread-local storage (TLS) model to use for
        thread-local variables. Valid values are: "global-dynamic",
        "local-dynamic", "initial-exec" and "local-exec". The default is
        "global-dynamic". The default model can be overridden with the
        tls_model attribute. The compiler will try to choose a more
        efficient model if possible.

 --ffllttoo,, --ffllttoo==ffuullll,, --ffllttoo==tthhiinn,, --eemmiitt--llllvvmm
        Generate output files in LLVM formats, suitable for link time
        optimization.  When used with _-_S this generates LLVM intermediate
        language assembly files, otherwise this generates LLVM bitcode
        format object files (which may be passed to the linker depending
        on the stage selection options).

        The default for _-_f_l_t_o is "full", in which the LLVM bitcode is
        suitable for monolithic Link Time Optimization (LTO), where the
        linker merges all such modules into a single combined module for
        optimization. With "thin", _T_h_i_n_L_T_O compilation is invoked instead.

NNOOTTEE:: #

           On Darwin, when using _-_f_l_t_o along with _-_g and compiling and
           linking in separate steps, you also need to pass
           --WWll,,--oobbjjeecctt__ppaatthh__llttoo,,<<llttoo--ffiilleennaammee>>..oo at the linking step to
           instruct the ld64 linker not to delete the temporary object
           file generated during Link Time Optimization (this flag is
           automatically passed to the linker by Clang if compilation and
           linking are done in a single step). This allows debugging the
           executable as well as generating the ..ddSSYYMM bundle using
           ddssyymmuuttiill((11)).

DDrriivveerr OOppttiioonnss

 --######   Print (but do not run) the commands to run for this compilation.

 ----hheellpp Display available options.

 --QQuunnuusseedd--aarrgguummeennttss
        Do not emit any warnings for unused driver arguments.

 --WWaa,,<<aarrggss>>
        Pass the comma separated arguments in args to the assembler.

 --WWll,,<<aarrggss>>
        Pass the comma separated arguments in args to the linker.

 --WWpp,,<<aarrggss>>
        Pass the comma separated arguments in args to the preprocessor.

 --XXaannaallyyzzeerr <<aarrgg>>
        Pass arg to the static analyzer.

 --XXaasssseemmbblleerr <<aarrgg>>
        Pass arg to the assembler.

 --XXlliinnkkeerr <<aarrgg>>
        Pass arg to the linker.

 --XXpprreepprroocceessssoorr <<aarrgg>>
        Pass arg to the preprocessor.

 --oo <<ffiillee>>
        Write output to file.

 --pprriinntt--ffiillee--nnaammee==<<ffiillee>>
        Print the full library path of file.

 --pprriinntt--lliibbggcccc--ffiillee--nnaammee
        Print the library path for the currently used compiler runtime
        library ("libgcc.a" or "libclang_rt.builtins.*.a").

 --pprriinntt--pprroogg--nnaammee==<<nnaammee>>
        Print the full program path of name.

 --pprriinntt--sseeaarrcchh--ddiirrss
        Print the paths used for finding libraries and programs.

 --ssaavvee--tteemmppss
        Save intermediate compilation results.

 --ssaavvee--ssttaattss,, --ssaavvee--ssttaattss==ccwwdd,, --ssaavvee--ssttaattss==oobbjj
        Save internal code generation (LLVM) statistics to a file in the
        current directory (_-_s_a_v_e_-_s_t_a_t_s/"-save-stats=cwd") or the directory
        of the output file ("-save-state=obj").

 --iinntteeggrraatteedd--aass,, --nnoo--iinntteeggrraatteedd--aass
        Used to enable and disable, respectively, the use of the
        integrated assembler. Whether the integrated assembler is on by
        default is target dependent.

 --ttiimmee  Time individual commands.

 --ffttiimmee--rreeppoorrtt
        Print timing summary of each stage of compilation.

 --vv     Show commands to run and use verbose output.

DDiiaaggnnoossttiiccss OOppttiioonnss

 --ffsshhooww--ccoolluummnn,, --ffsshhooww--ssoouurrccee--llooccaattiioonn,, --ffccaarreett--ddiiaaggnnoossttiiccss,,
 --ffddiiaaggnnoossttiiccss--ffiixxiitt--iinnffoo,, --ffddiiaaggnnoossttiiccss--ppaarrsseeaabbllee--ffiixxiittss,,
 --ffddiiaaggnnoossttiiccss--pprriinntt--ssoouurrccee--rraannggee--iinnffoo,, --ffpprriinntt--ssoouurrccee--rraannggee--iinnffoo,,
 --ffddiiaaggnnoossttiiccss--sshhooww--ooppttiioonn,, --ffmmeessssaaggee--lleennggtthh
        These options control how Clang prints out information about
        diagnostics (errors and warnings). Please see the Clang User's
        Manual for more information.

PPrreepprroocceessssoorr OOppttiioonnss

 --DD<<mmaaccrroonnaammee>>==<<vvaalluuee>>
        Adds an implicit #define into the predefines buffer which is read
        before the source file is preprocessed.

 --UU<<mmaaccrroonnaammee>>
        Adds an implicit #undef into the predefines buffer which is read
        before the source file is preprocessed.

 --iinncclluuddee <<ffiilleennaammee>>
        Adds an implicit #include into the predefines buffer which is read
        before the source file is preprocessed.

 --II<<ddiirreeccttoorryy>>
        Add the specified directory to the search path for include files.

 --FF<<ddiirreeccttoorryy>>
        Add the specified directory to the search path for framework
        include files.

 --nnoossttddiinncc
        Do not search the standard system directories or compiler builtin
        directories for include files.

 --nnoossttddlliibbiinncc
        Do not search the standard system directories for include files,
        but do search compiler builtin include directories.

 --nnoobbuuiillttiinniinncc
        Do not search clang's builtin directory for include files.

EENNVVIIRROONNMMEENNTT #

TTMMPPDDIIRR,, TTEEMMPP,, TTMMPP #

        These environment variables are checked, in order, for the
        location to write temporary files used during the compilation
        process.

 CCPPAATTHH  If this environment variable is present, it is treated as a
        delimited list of paths to be added to the default system include
        path list. The delimiter is the platform dependent delimiter, as
        used in the PATH environment variable.

        Empty components in the environment variable are ignored.

CC__IINNCCLLUUDDEE__PPAATTHH,, OOBBJJCC__IINNCCLLUUDDEE__PPAATTHH,, CCPPLLUUSS__IINNCCLLUUDDEE__PPAATTHH,, #

OOBBJJCCPPLLUUSS__IINNCCLLUUDDEE__PPAATTHH #

        These environment variables specify additional paths, as for
        _C_P_A_T_H, which are only used when processing the appropriate
        language.

MMAACCOOSSXX__DDEEPPLLOOYYMMEENNTT__TTAARRGGEETT #

        If _-_m_m_a_c_o_s_x_-_v_e_r_s_i_o_n_-_m_i_n is unspecified, the default deployment
        target is read from this environment variable. This option only
        affects Darwin targets.

BBUUGGSS #

 To report bugs, please visit
 <_h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_l_l_v_m_/_l_l_v_m_-_p_r_o_j_e_c_t_/_i_s_s_u_e_s_/>.  Most bug reports should
 include preprocessed source files (use the _-_E option) and the full output
 of the compiler, along with information to reproduce.

SSEEEE AALLSSOO #

 aass((11)), ccllaanngg--llooccaall((11)), lldd((11))

AAUUTTHHOORR #

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

CCOOPPYYRRIIGGHHTT #

 2007-2023, The Clang Team

16 October 21, 2023 CLANG, CLANG++, CLANG-CPP(1)