clang是一款LLVM编译器;跟linux下的gcc、gc++编译器差不多。
用法:
clang [options] <inputs>
clang [选项] <输入>
选项:
- ### 打印(但不要运行)为编译运行的命令
--analyze 运行静态分析器
-arcmt-migrate-emit-errors 即使迁移者可以修复它们,也会发出ARC错误
-arcmt-migrate-report-output <value> plist报告的输出路径
--cuda-device-only 仅进行设备端CUDA编译
--cuda-host-only 仅进行主机端CUDA编译
--cuda-path = <value> CUDA安装路径
-cxx-isystem <directory> 将目录添加到C ++ SYSTEM包含搜索路径
-c 只运行预处理,编译和汇编步骤
-dD 除了正常输出外,还在-E模式下打印宏定义
-dependency-dot <value> 将DOT格式化的头依赖关系写入的文件名
-dependency-file <value> 文件名(或 - )将依赖项输出写入
-dM 在-E模式下打印宏定义而不是普通输出
-emit-ast AST文件的源输入
-emit-llvm 对汇编器和目标文件使用LLVM表示法
-E 只运行预处理器
-faltivec 启用AltiVec矢量初始化程序语法
-fansi-escape-codes 使用ANSI转义码进行诊断
-fapple-kext 使用Apple的内核扩展ABI
-fapple-pragma-pack 启用Apple gcc兼容的#pragma pack处理
-fapplication-extension 将代码限制为可用于App Extensions的代码
-fblocks 启用“块”语言功能
-fborland-extensions 接受Borland编译器支持的非标准结构
-fbuild-session-file=<file> 使用<file>的上次修改时间作为构建会话时间戳
-fbuild-session-timestamp = <时间以秒为单位的时间> 当前构建会话开始的时间
-fcolor-diagnostics 在诊断中使用颜色
-fcomment-block-commands=<arg> 将<arg>中的每个逗号分隔参数视为文档注释块命令
-fcoverage-mapping 生成覆盖映射以启用代码覆盖率分析
-fcxx-exceptions 启用C ++异常
-fdata-sections 将每个数据放在它自己的部分(仅限ELF)
-fdebug-prefix-map=<value> 在调试信息中重新映射文件源路径
-fdebug-types-section 将调试类型放在它们自己的部分(仅限ELF)
-fdeclspec 允许__declspec作为关键字
-fdelayed-template-parsing 在翻译单元的末尾解析模板化的函数定义
-fdiagnostics-parseable-fixits 打印修复 - 它在机器可解析的形式
-fdiagnostics-print-source-range-info 打印源范围以数字形式跨越
-fdiagnostics-show-note-include-stack 显示包括诊断说明的堆栈
-fdiagnostics-show-option 用可映射的诊断程序打印选项名称
-fdiagnostics-show-template-tree 打印不同模板的模板比较树
-fdollars-in-identifiers 在标识符中允许“$”
-femit-all-decls 即使未使用,也会发出所有声明
-femulated-tls 使用emutls函数来访问thread_local变量
-fexceptions 启用对异常处理的支持
-ffast-math 启用*前端*的“快速数学”模式。这对优化没有任何影响,但提供了一个预处理宏__FAST_MATH__和GCC的-ffast-math标志一样
-ffixed-r9 保留r9寄存器(仅限ARM)
-ffixed-x18 保留x18寄存器(仅限AArch64)
-ffp-contract = <value> 表单融合的FP操作(例如FMA):fast(everywhere)|上(根据FP_CONTRACT编译指示,默认)|关(永远不会熔断)
-ffreestanding 断言汇编发生在独立的环境
-ffunction-sections 将每个函数放在它自己的部分(仅ELF)
-fgnu-keywords 允许使用GNU扩展关键字,而不考虑语言标准
-fgnu-runtime 生成与标准GNU Objective-C运行时兼容的输出
-fgnu89-inline 使用gnu89内联语义
-fimplicit-module-maps 隐式搜索文件系统的模块映射文件。
-finstrument-functions 生成对仪器功能进入和退出的调用
-fintegrated-as 启用集成汇编器
-flto = <value> 将LTO模式设置为“完整”或“细化”
-flto 在“全”模式下启用LTO
-fmath-errno 要求数学函数通过设置errno来指示错误
-fmax-type-align=<value> 指定在缺乏明确对齐的指针上执行的最大对齐
-fmodule-file = <file> 加载这个预编译的模块文件
-fmodule-map-file=<file> 加载这个模块映射文件
-fmodule-name = <name> 指定要建立的模块的名称
-fmodules-cache-path=<directory> 指定模块缓存路径
-fmodules-decluse 要求声明模块内使用的模块
-fmodules-ignore-macro=<value> 在构建和加载模块时,忽略给定宏的定义
-fmodules-prune-after=<seconds> 指定之后的时间间隔(以秒为单位),模块文件将被视为未使用
-fmodules-prune-interval=<seconds> 指定尝试修剪模块缓存的时间间隔(以秒为单位)
-fmodules-search-all 搜索甚至非导入的模块来解析引用
-fmodules-strict-decluse 像-fmodules-decluse,但要求所有头文件在模块中
-fmodules-user-build-path <directory> 指定模块用户构建路径
-fmodules-validate-once-per-build-session 如果在此构建会话期间模块已成功验证或加载,则不要验证模块的输入文件
-fmodules-validate-system-headers 验证加载模块时模块依赖的系统头
-fmodules 启用“模块”语言功能
-fms-compatibility-version=<value> 表示要在_MSC_VER中报告的Microsoft编译器版本号的点分隔值(0 =不定义它(默认值))
-fms-compatibility 启用完整的Microsoft Visual C ++兼容性
-fms-extensions 接受Microsoft编译器支持的一些非标准结构
-fmsc-version = <value> 要在_MSC_VER中报告的Microsoft编译器版本号(0 =不定义它(默认值))
-fno-access-control 禁用C ++访问控制
-fno-assume-sane-operator-new 不要认为C ++的全局运算符new不能混淆任何指针
-fno-autolink 为自动库链接禁止生成链接器指令
-fno-builtin- <value> 禁用特定函数的隐式内建知识
-fno-builtin 禁用隐含的内建知识的功能
-fno-common 像常规定义一样编译通用全局变量
-fno-constant-cfstrings 禁止创建CodeFoundation类型的常量字符串
-fno-coverage-mapping 禁用代码覆盖率分析
-fno-declspec __declspec作为关键字
-fno-diagnostics-fixit-info 不要在诊断中包含fixit信息
-fno-dollars-in-identifiers 在标识符中不允许使用“$”
-fno-elide-constructors 禁用C ++拷贝构造函数elision
-fno-elide-type 在打印诊断信息时不要忽略类型
-fno-gnu-inline-asm 禁用GNU风格的内联asm
-fno-integrated-as 禁用集成汇编器
-fno-lax-vector-conversions 禁止具有不同数量的元素或不同的元素类型的向量之间的隐式转换
-fno -lto 禁用LTO模式(默认)
-fno-math-builtin 禁用数学函数的隐含的内建知识
-fno-merge-all-constants 不允许合并常量
-fno-objc-infer-related-result-type 不要推断基于方法族的Objective-C相关结果类型
-fno-operator-names 不要将C ++运算符名称关键字视为运算符的同义词
-fno-profile-instr-generate 禁用生成配置文件。
-fno-profile-instr-use 禁止使用检测数据进行配置文件引导优化
-fno-reroll-loops 关闭循环reroller
-fno-rtti 禁止生成rtti信息
-fno-sanitize-blacklist 不要使用黑名单文件进行消毒
-fno-sanitize-cfi-cross-dso 禁用交叉DSO调用的控制流完整性(CFI)检查。
-fno-sanitize-coverage=<value> 禁用卫生洗涤剂覆盖仪器的指定功能
-fno-sanitize-memory-track-origins 在MemorySanitizer中禁用原点跟踪
-fno-sanitize-recover=<value> 禁用指定消毒剂的恢复
-fno-sanitize-trap=<value> 禁用指定消毒剂的捕获
-fno-short-wchar 强制wchar_t是一个无符号整数
-fno-show-column 不要在诊断中包含列号
-fno-show-source-location 不要在诊断中包含源位置信息
-fno-signed-char Char是无符号的
-fno-signed-zeros 允许忽略浮点数零的符号的优化
-fno-spell-checking 禁用拼写检查
-fno-stack-protector 禁止使用堆栈保护器
-fno-standalone-debug 限制生成的调试信息以减少调试二进制文件的大小
-fno-threadsafe-statics 不要发出代码来使本地静态线程的初始化安全
-fno-trigraphs 不处理三字符序列
-fno-unroll-loops 关闭循环展开程序
-fno-use-cxa-atexit 不要使用__cxa_atexit来调用析构函数
-fno-use-init-array 不要使用.init_array而不是.ctors
-fobjc-arc-exceptions 在合成-fobjc-arc中的保留和释放时使用EH安全代码
-fobjc-arc 合成保留并释放对Objective-C指针的调用
-fobjc-exceptions 启用Objective-C异常
-fobjc-gc-only 将GC专门用于Objective-C相关的内存管理
-fobjc-gc 启用Objective-C垃圾回收
-fobjc-runtime = <value> 指定目标Objective-C运行时类型和版本
-fobjc-weak 在Objective-C中启用ARC风格的弱引用
-fpack-struct = <value> 指定默认的最大结构打包对齐
-fpascal-strings 识别并构造Pascal风格的字符串文字
-fpcc-struct-return 重写默认的ABI以返回堆栈中的所有结构
-fplugin = <dsopath> 加载指定的插件(动态共享对象)
-fprofile-generate=<directory> 生成检测代码以将执行计数收集到<directory> /default.profraw(由LLVM_PROFILE_FILE env var覆盖)
-fprofile-instr-generate=<file> 生成检测代码以将执行计数收集到<file>中(由LLVM_PROFILE_FILE env var覆盖)
-fprofile-instr-generate 生成检测代码以将执行计数收集到default.profraw文件中(由'='选项或LLVM_PROFILE_FILE env var覆盖)
-fprofile-instr-use=<value> 使用仪器数据进行配置文件指导优化
-fprofile-sample-use=<value> 启用基于样本的配置文件指导优化
-fprofile-use=<pathname> 使用仪器数据进行配置文件指导优化。如果pathname是一个目录,它从<pathname> /default.profdata中读取。否则,它从文件<路径名>中读取。
-freciprocal-math 允许分工操作重新关联
-freg-struct-return 重写默认的ABI以返回寄存器中的小结构
-freroll-loops 打开循环reroller
-fsanitize-address-field-padding=<value> AddressSanitizer的字段填充级别
-fsanitize-blacklist=<value> 杀菌剂的黑名单文件的路径
-fsanitize-cfi-cross-dso 启用交叉DSO调用的控制流完整性(CFI)检查。
-fsanitize-coverage=<value> 指定卫生洗护者的覆盖范围的类型
-fsanitize-memory-track-origins=<value> 在MemorySanitizer中启用原点跟踪
-fsanitize-memory-track-origins 在MemorySanitizer中启用原点跟踪
-fsanitize-memory-use-after-dtor 在MemorySanitizer中启用破坏后检测
-fsanitize-recover=<value> 启用指定消毒剂的恢复
-fsanitize-trap=<value> 为指定的卫生处理程序启用陷阱
-fsanitize = <check> 打开运行时检查各种形式的未定义或可疑行为。查看用户手册查看可用的检查
-fshort-enums 仅为声明的可能值范围分配一个枚举类型所需的字节数
-fshort-wchar 强制wchar_t是一个简短的unsigned int
-fshow-overloads=<value> 超载解决失败时显示哪些超载候选:best | all;默认为全部
-fsized-deallocation 启用C ++ 14大小的全局释放函数
-fslp-vectorize-aggressive 启用BB矢量化过程
-fslp-vectorize 启用超级字符级并行矢量化过程
-fstack-protector-all 强制所有功能使用堆栈保护器
-fstack-protector-strong 使用强大的启发式将堆栈保护器应用于函数
-fstack-protector 启用堆栈保护器,以实现可能易受堆栈粉碎的功能
-fstandalone-debug 为程序使用的所有类型发出完整的调试信息
-fstrict-enums 根据枚举值范围的严格定义启用优化
-fstrict-vtable-pointers 根据覆盖多态C ++对象的严格规则启用优化
-fthinlto-index=<value> 使用提供的函数摘要索引执行ThinLTO导入
-ftrap-function = <value> 调用指定的函数而不是陷阱指令
-ftrapv-handler=<function name> 指定要在溢出时调用的函数
-ftrapv 整数溢出陷阱
-ftrigraphs 处理三元组序列
-funique-section-names 对文本和数据部分使用唯一名称(仅限ELF)
-funroll-loops 打开循环展开程序
-fuse-init-array 使用.init_array而不是.ctors
-fveclib=<value> 使用给定的矢量函数库
-fvectorize 启用循环矢量化遍
-fvisibility-inlines-hidden 默认提供内联C ++成员函数的默认可见性
-fvisibility-ms-compat 默认情况下,提供全局类型的“默认”可见性和全局函数和变量“隐藏”可见性
-fvisibility = <value> 设置所有全局声明的默认符号可见性
-fwrapv 将有符号整数溢出视为二进制补码
-fwritable-strings 将字符串文字存储为可写数据
-fzvector 启用System z矢量语言扩展
-F <value> 将目录添加到框架包含搜索路径
--gcc-toolchain = <value> 在给定目录下使用gcc工具链
-gcodeview 生成CodeView调试信息
-gdwarf-2 用矮版本2生成源代码级调试信息
-gdwarf-3 使用矮版本3生成源代码级调试信息
-gdwarf-4 使用矮版本4生成源代码级调试信息
-gdwarf-5 使用矮版本5生成源代码级调试信息
-gline-tables-only 仅发出调试行号码表
-gmodules 使用外部引用生成调试信息到叮当声模块或预编译头
-g 生成源代码级调试信息
-help 显示可用选项
-H 显示标题包含和嵌套深度
-idirafter <value> 将目录添加到AFTER包含搜索路径
-iframework <value> 将目录添加到SYSTEM框架搜索路径
-imacros <file> 在解析之前包含来自文件的宏
-include-pch <file> 包含预编译头文件
-include <file> 在解析之前包含文件
-index-header-map 使下一个包含的目录(-I或-F)成为索引器标题映射
-iprefix <dir> 设置-iwithprefix / -iwithprefixbefore前缀
-iquote <directory> 将目录添加到QUOTE包含搜索路径
-isysroot <dir> 设置系统根目录(通常为/)
-isystem <directory> 将目录添加到SYSTEM包含搜索路径
-ivfsoverlay <value> 将文件描述的虚拟文件系统覆盖在真实文件系统上
-iwithprefixbefore <dir> 设置目录以包含带前缀的搜索路径
-iwithprefix <dir> 将目录设置为SYSTEM包含带前缀的搜索路径
-iwithsysroot <directory> 将目录添加到SYSTEM包含搜索路径,绝对路径相对于-isysroot
-I <value> 添加目录以包含搜索路径
-mabicalls 启用SVR4风格的与位置无关的代码(仅限Mips)
-mcrc 允许使用CRC指令(仅限ARM)
-MD 编写一个包含用户和系统标题的depfile
-meabi <value> 设置EABI类型,例如4,5或gnu(默认取决于三重)
-mfix-cortex-a53-835769 解决方法Cortex-A53纠错835769(仅适用于AArch64)
-mfp32 使用32位浮点寄存器(仅限MIPS)
-mfp64 使用64位浮点寄存器(仅限MIPS)
-MF <file> 将-MMD,-MD,-MM或-M的depfile输出写入<file>
-mgeneral-regs-only 生成仅使用通用寄存器的代码(仅限AArch64)
-mglobal-merge 启用全局合并
-MG 将缺少的标题添加到depfile
-mhvx-double 启用六角形双矢量扩展
-mhvx 启用六角形向量扩展
--migrate 运行迁移器
-mincremental-linker-compatible (integrated-as)发出可用于增量链接器的目标文件
-mios-version-min=<value> 设置iOS部署目标
-mllvm <value> 转发到LLVM的选项处理的其他参数
-mlong-calls 生成一个间接跳转来启用跳跃超过64M
-mmacosx-version-min=<value> 设置Mac OS X部署目标
-MMD 编写一个包含用户标题的depfile
-mms-bitfields 将默认结构布局设置为与Microsoft编译器标准兼容
-mmsa 启用MSA ASE(仅限MIPS)
-MM 和-MMD一样,但也暗含-E,并默认写入stdout
-mno-abicalls 禁用SVR4风格的与位置无关的代码(仅限Mips)
-mno-fix-cortex-a53-835769 不要解决方法Cortex-A53勘误表835769(仅适用于AArch64)
-mno-global-merge 禁用全局合并
-mno-hvx-double 禁用六角形双向量扩展
-mno-hvx 禁用六角形矢量扩展
-mno-implicit-float 不生成隐式浮点指令
-mno-incremental-linker-compatible (integrated-as)发出不能与增量链接器一起使用的目标文件
-mno-long-calls 恢复不生成长时间调用的默认行为
-mno-movt 不允许使用movt / movw对(仅适用于ARM)
-mno-ms-bitfields 不要将默认结构布局设置为与Microsoft编译器标准兼容
-mno-msa 禁用MSA ASE(仅限MIPS)
-mno-restrict-it 允许为ARMv8生成不推荐的IT块。 ARMv8 Thumb模式默认关闭
-mno-unaligned-access 强制所有内存访问对齐(仅AArch32 / AArch64)
-mnocrc 不允许使用CRC指令(仅限ARM)
-module-dependency-dir <value> 目录转储模块依赖关系
-momit-leaf-frame-pointer 忽略叶函数的帧指针设置
-MP 为每个依赖项创建假目标(除了主文件)
-mqdsp6-compat 启用hexagon-qdsp6向后兼容性
-MQ <value> 指定在depfile中引用的主文件输出的名称
-mrelax-all(integrated-as) 放松所有机器说明
-mrestrict-it 不允许为ARMv8生成已弃用的IT块。它默认为ARMv8 Thumb模式。
-mrtd 使StdCall调用约定成为默认值
-msoft-float 使用软件浮点
-mstack-alignment=<value> 设置堆栈对齐
-mstack-probe-size=<value> 设置堆栈探针大小
-mstackrealign Force 在进入每个函数时重新对齐堆栈
-mthread-model <value> 要使用的线程模型,例如posix,单(默认为posix)
-MT <value> 在depfile中指定主文件输出的名称
-munaligned-access 允许内存访问未对齐(仅限AArch32 / AArch64)
-MV 使用NMake / Jom格式作为depfile
-M 像-MD,但是也暗示了-E,并且默认写入到标准输出
--no-system-header-prefix=<prefix> 将所有以<prefix>开头的#include路径视为不包含系统标题。
-nobuiltininc 禁用内建的#include目录
-nostdinc ++ 禁用C ++标准库的标准#include目录
-ObjC ++ 将源输入文件视为Objective-C ++输入
-objcmt-atomic-property 使迁移到“原子”属性
-objcmt-migrate-all 启用迁移到现代的ObjC
-objcmt-migrate-annotation 启用迁移到属性和方法注释
-objcmt-migrate-designated-init 启用迁移以推断初始化方法的NS_DESIGNATED_INITIALIZER
-objcmt-migrate-instancetype 启用迁移来推断方法结果类型的实例类型
-objcmt-migrate-literals 启用迁移到现代的ObjC文字
-objcmt-migrate-ns-macros 启用迁移到NS_ENUM / NS_OPTIONS宏
-objcmt-migrate-property-dot-synta 启用setter / getter消息到属性点语法的迁移
-objcmt-migrate-property 启用迁移到现代ObjC属性
-objcmt-migrate-protocol-conformance 启用迁移以在类上添加协议一致性
-objcmt-migrate-readonly-property 启用迁移到现代ObjC只读属性
-objcmt-migrate-readwrite-property 启用迁移到现代ObjC readwrite属性
-objcmt-migrate-subscripting 启用迁移到现代ObjC下标
-objcmt-ns-nonatomic-iosonly 启用迁移以使用NS_NONATOMIC_IOSONLY宏来设置属性的“原子”属性
-objcmt-returns-innerpointer-property 启用迁移以使用NS_RETURNS_INNER_POINTER注释属性
-objcmt-whitelist-dir-path=<value> 只修改提供的目录路径中包含的文件名
-ObjC 将源输入文件视为Objective-C输入
-omptargets = <value> 指定逗号分隔的三元组列表OpenMP卸载要支持的目标
-o <file> 将输出写入<file>
-pg 启用mcount工具
-pipe 尽可能在命令之间使用管道
-print-file-name = <file> 打印<file>的完整库路径
-print-ivar-layout 启用Objective-C Ivar布局位图打印跟踪
-print-libgcc-file-name 打印“libgcc.a”的库路径
-print-prog-name = <name> 打印<name>的完整程序路径
-print-search-dirs 打印用于查找库和程序的路径
-pthread 在生成的代码中支持POSIX线程
-P 在-E模式下禁用线标记输出
-Qunused-arguments 不要为未使用的驱动程序参数发出警告
-relocatable-pch 是否构建可重定位的预编译头
-rewrite-legacy-objc 将遗留的Objective-C源代码重写为C ++
-rewrite-objc 将Objective-C源码重写为C ++
-Rpass-analysis = <value> 从名称与给定的POSIX正则表达式匹配的优化过程中报告转换分析
-Rpass-missed = <value> 通过名称与给定的POSIX正则表达式匹配的优化过程报告错过的转换
-Rpass = <value> 通过名称与给定的POSIX正则表达式匹配的优化过程执行报告转换
-R<remark> 启用指定的注释
-save-temps = <value> 保存中间编译结果。
-save-temps 保存中间编译结果
-serialize-diagnostics <value> 将编译器诊断信息序列化为一个文件
-std = <value> 要编译的语言标准
-stdlib = <value> 要使用的C ++标准库
--system-header-prefix=<prefix> 将所有以<prefix>开头的#include路径视为包含系统标题。
-S 只运行预处理和编译步骤
--target = <value> 生成给定目标的代码
-time 时间个别命令
-traditional-cpp 启用一些传统的CPP仿真
-trigraphs 处理三元组序列
-undef undef 所有系统定义
--verify-debug-info 验证调试输出的二进制表示
-verify-pch 加载并确认预编译的头文件不是陈旧的
-v 显示运行和使用详细输出的命令
-Wa,<arg> 将<arg>中逗号分隔的参数传递给汇编器
-Wl,<arg> 将<arg>中的逗号分隔参数传递给链接器
-working-directory <value> 解析相对于指定目录的文件路径
-Wp,<arg> 将<arg>中的逗号分隔参数传递给预处理器
-W <warning> 启用指定的警告
-w 取消所有警告
-Xanalyzer <arg> 将<arg>传递给静态分析器
-Xassembler <arg> 将<arg>传递给汇编器
-Xclang <arg> 将<arg>传递给clang编译器
-Xlinker <arg> 将<arg>传递给链接器
-Xpreprocessor <arg> 将<arg>传递给预处理器
-x <language> 将随后的输入文件视为键入<language>
-z <arg> 将-z <arg>传递给链接器
clang效果与评价:
因为此工具它就是一个编译器,跟gcc是同理的,都是编译器。只是它们之间的优缺点不同罢了。
在线视频:
优酷:http://v.youku.com/v_show/id_XMzI1MDI4ODYwOA==.html
腾讯:https://v.qq.com/x/page/t05212je9sw.html
爱奇艺:http://www.iqiyi.com/w_19rutgeipt.html
乐视: