Clang 命令行参数参考

简介

此页面列出了目前与 GCC 兼容的 clangclang++ 驱动程序支持的命令行参数。

-B<prefix>, --prefix <arg>, --prefix=<arg>

在 $prefix$file 中搜索可执行文件、库和数据文件。如果 $prefix 是目录,则搜索 $prefix/$file

-F<arg>

将目录添加到框架包含搜索路径

-K
-ObjC

将源输入文件视为 Objective-C 输入

-ObjC++

将源输入文件视为 Objective-C++ 输入

-Qn, -fno-ident

不要发出包含编译器名称和版本的元数据

-Qunused-arguments

不要发出关于未使用驱动程序参数的警告

-Qy, -fident

发出包含编译器名称和版本的元数据

-Wa,<arg>,<arg2>...

将 <arg> 中的逗号分隔的参数传递给汇编器

-Wlarge-by-value-copy=<arg>
-Xarch_<arg1> <arg2>
-Xarch_device <arg>

将 <arg> 传递给 CUDA/HIP 设备编译

-Xarch_host <arg>

将 <arg> 传递给 CUDA/HIP 主机编译

-Xcuda-fatbinary <arg>

将 <arg> 传递给 fatbinary 调用

-Xcuda-ptxas <arg>

将 <arg> 传递给 ptxas 汇编器

-alias_list <arg>
-all_load
-allowable_client <arg>
--analyze

运行静态分析器

--analyzer-no-default-checks
--analyzer-output<arg>

静态分析器报告输出格式 (html|plist|plist-multi-file|plist-html|sarif|sarif-html|text)。

-arch <arg>
-arch_errors_fatal
-arch_only <arg>
-arcmt-migrate-emit-errors

即使迁移器可以修复 ARC 错误,也要发出这些错误

-arcmt-migrate-report-output <arg>

plist 报告的输出路径

--autocomplete=<arg>
-bind_at_load
-bundle
-bundle_loader <arg>
-client_name<arg>
-compatibility_version<arg>
--config=<file>, --config <arg>

指定配置文件

--constant-cfstrings
-current_version<arg>
-darwin-target-variant <arg>

为部署目标的额外运行时变体生成代码

-darwin-target-variant-triple <arg>

指定 darwin 目标变体三元组

-dead_strip
-dependency-dot <arg>

要写入 DOT 格式的标头依赖项的文件名

-dependency-file <arg>

要写入依赖项输出的文件名 (或 -)

-dsym-dir<dir>

要将 dSYM (如果有) 输出到的目录

-dumpdir <dumppfx>

使用 <dumpfpx> 作为前缀以形成辅助文件和转储文件名

-dumpmachine

显示编译器的目标处理器

-dumpversion

显示编译器的版本

--dyld-prefix=<arg>, --dyld-prefix <arg>
-dylib_file <arg>
-dylinker
-dylinker_install_name<arg>
-dynamic
-dynamiclib
-emit-ast

为源代码输入生成 Clang AST 文件

--emit-extension-symbol-graphs

为扩展模块生成额外的符号图。

--emit-static-lib

启用链接器作业以输出静态库。

-emit-symbol-graph

在编译过程中作为副作用生成提取 API 信息。

--end-no-unused-arguments

开始对未使用的驱动程序参数发出警告

-exported_symbols_list <arg>
--extract-api-ignores=<arg1>,<arg2>...

逗号分隔的文件列表,包含一个换行符分隔的 API 符号列表,这些符号在提取 API 信息时需要忽略。

-faligned-new=<arg>
-fautomatic
-fcheck-new, -fno-check-new

不要假设 C++ 运算符 new 可能不会返回 NULL

-fconvergent-functions, -fno-convergent-functions

假设所有函数都可能是收敛的。

-fcx-fortran-rules, -fno-cx-fortran-rules

针对复数运算启用范围缩减。

-fcx-limited-range, -fno-cx-limited-range

启用涉及复数运算的基本代数展开。

-ffinite-math-only, -fno-finite-math-only

允许对浮点进行优化,这些优化假定参数和结果不是 NaN 或 +-inf。这定义了 \_\_FINITE\_MATH\_ONLY\_\_ 预处理器宏。

-flat_namespace
-fmodule-output

在编译标准 C++ 模块单元时保存中间模块文件结果。

-fmodule-output=<arg>

在编译标准 C++ 模块单元时保存中间模块文件结果。

-fmodules-embed-all-files<arg>

将此编译读取的所有文件的內容嵌入到生成的模块文件中。

-fopenmp-targets=<arg1>,<arg2>...

指定逗号分隔的三元组 OpenMP 卸载目标列表,以供支持

-force_cpusubtype_ALL
-force_flat_namespace
-force_load <arg>
-fplugin-arg-<name>-<arg>

将 <arg> 传递给插件 <name>

-framework <arg>
-frtlib-add-rpath, -fno-rtlib-add-rpath, --no-offload-add-rpath, --offload-add-rpath

将包含架构特定资源目录的 -rpath 添加到链接器标志中。当指定 –hip-link 时,还将包含 HIP 运行时库目录的 -rpath 添加到链接器标志中

-fsanitize-system-ignorelist=<arg>

用于消毒剂的系统忽略列表文件路径

-fsanitize-undefined-ignore-overflow-pattern=<arg1>,<arg2>...

指定要从算术消毒剂检测中排除的溢出模式。<arg> 必须为 ‘none’、‘all’、‘add-unsigned-overflow-test’、‘add-signed-overflow-test’、‘negated-unsigned-const’ 或 ‘unsigned-post-decr-while’。

-fshow-skipped-includes
#include 文件可能由于包含保护优化而被“跳过”

或 #pragma once。此标志使 -H 也显示此类包含项。

-fsystem-module

将此模块构建为系统模块。仅与 -emit-module 结合使用

--gcc-install-dir=<arg>

使用指定目录中的 GCC 安装。该目录以诸如 ‘lib{,32,64}/gcc{,-cross}/$triple/$version’ 之类的路径组件结尾。注意:编译器使用的可执行文件(例如 ld)不会被选定的 GCC 安装覆盖

--gcc-toolchain=<arg>

指定 Clang 可以找到 ‘include’ 和 ‘lib{,32,64}/gcc{,-cross}/$triple/$version’ 的目录。Clang 将使用版本最大的 GCC 安装

--gcc-triple=<arg>

搜索具有指定三元组的 GCC 安装。

-gcodeview

生成 CodeView 调试信息

-gcodeview-command-line, -gno-codeview-command-line

将编译器路径和命令行输出到 CodeView 调试信息中

-gcodeview-ghash, -gno-codeview-ghash

在 .debug$H 部分中输出类型记录哈希

-gen-reproducer=<arg>, -fno-crash-diagnostics (equivalent to -gen-reproducer=off)

在(选项:off、crash(默认)、error、always)上输出重现器

-gpulibc

链接 LLVM C 库以用于 GPU

-headerpad_max_install_names<arg>
-help, --help

显示可用选项

--help-hidden

显示隐藏选项的帮助

-image_base <arg>
-init <arg>
-install_name <arg>
-interface-stub-version=<arg>
-keep_private_externs
-lazy_framework <arg>
-lazy_library <arg>
-m3dnow, -mno-3dnow
-m3dnowa, -mno-3dnowa
--migrate

运行迁移器

-mllvm <arg>, -mllvm=<arg>

要转发到 LLVM 选项处理的额外参数

-mmlir <arg>

要转发到 MLIR 选项处理的额外参数

-module-dependency-dir <arg>

要将模块依赖项转储到的目录

-mtvos-simulator-version-min=<arg>, -mappletvsimulator-version-min=<arg>
-multi-lib-config=<file>, --multi-lib-config=<file>

要用于多库选择的 YAML 配置文件路径

-multi_module
-multiply_defined <arg>
-multiply_defined_unused <arg>
-mzos-hlq-clang=<ClangHLQ>

z/OS C++RT 侧甲板数据集的高级限定符

-mzos-hlq-csslib=<CsslibHLQ>

z/OS CSSLIB 数据集的高级限定符

-mzos-hlq-le=<LeHLQ>

z/OS 语言环境数据集的高级限定符

-mzos-sys-include=<SysInclude>

z/OS 上系统标头的路径

--no-default-config

禁用加载默认配置文件

-no-integrated-cpp, --no-integrated-cpp
-no_dead_strip_inits_and_terms
-nodefaultlibs
-nodriverkitlib
-nofixprebinding
-nogpulib, -nocudalib

不要链接用于 CUDA/HIP 设备编译的设备库

-nogpulibc
-nolibc
-nomultidefs
-nopie
-noprebind
-noprofilelib
-noseglinkedit
-nostdlib++
-o<file>, --output <arg>, --output=<arg>

将输出写入 <file>

-objcmt-allowlist-dir-path=<arg>, -objcmt-white-list-dir-path=<arg>, -objcmt-whitelist-dir-path=<arg>

只修改文件名包含在提供的目录路径中的文件

-objcmt-atomic-property

迁移到 'atomic' 属性

-objcmt-migrate-all

启用迁移到现代 ObjC

-objcmt-migrate-annotation

启用迁移到属性和方法注释

-objcmt-migrate-designated-init

启用迁移以推断 NS_DESIGNATED_INITIALIZER 用于初始化方法

-objcmt-migrate-instancetype

启用迁移以推断 instancetype 用于方法结果类型

-objcmt-migrate-literals

启用迁移到现代 ObjC 字面量

-objcmt-migrate-ns-macros

启用迁移到 NS_ENUM/NS_OPTIONS 宏

-objcmt-migrate-property

启用迁移到现代 ObjC 属性

-objcmt-migrate-property-dot-syntax

启用将 setter/getter 消息迁移到属性点语法

-objcmt-migrate-protocol-conformance

启用迁移以在类上添加协议一致性

-objcmt-migrate-readonly-property

启用迁移到现代 ObjC 只读属性

-objcmt-migrate-readwrite-property

启用迁移到现代 ObjC 可读写属性

-objcmt-migrate-subscripting

启用迁移到现代 ObjC 索引

-objcmt-ns-nonatomic-iosonly

启用迁移以使用 NS_NONATOMIC_IOSONLY 宏来设置属性的 'atomic' 属性

-objcmt-returns-innerpointer-property

启用迁移以使用 NS_RETURNS_INNER_POINTER 注释属性

-object
-object-file-name=<file>, -object-file-name <arg>

设置调试信息的输出 <file>

--offload=<arg1>,<arg2>...

指定以逗号分隔的卸载目标三元组列表(仅限 CUDA 和 HIP)

-p, --profile

使用 prof 启用 mcount 检测

-pagezero_size<arg>
-pg

启用 mcount 检测

-pipe, --pipe

在可能的情况下,在命令之间使用管道

-prebind
-prebind_all_twolevel_modules
-preload
--pretty-sgf

发出漂亮打印的符号图

--print-diagnostic-categories
-print-diagnostic-options, --print-diagnostic-options

打印所有 Clang 的警告选项

-print-effective-triple, --print-effective-triple

打印有效的目标三元组

-print-enabled-extensions, --print-enabled-extensions

打印给定目标和 -march/-mcpu 选项启用的扩展。(仅限 AArch64 和 RISC-V)

-print-file-name=<file>, --print-file-name=<file>, --print-file-name <arg>

打印 <file> 的完整库路径

-print-ivar-layout

启用 Objective-C Ivar 布局位图打印跟踪

-print-libgcc-file-name, --print-libgcc-file-name

打印当前使用的编译器运行时库的库路径(“libgcc.a” 或 “libclang_rt.builtins.*.a”)

-print-library-module-manifest-path, --print-library-module-manifest-path

打印 C++ 标准库模块清单的路径

-print-multi-directory, --print-multi-directory
-print-multi-flags-experimental, --print-multi-flags-experimental

打印用于选择 multilibs 的标志(实验性)

-print-multi-lib, --print-multi-lib
-print-prog-name=<name>, --print-prog-name=<name>, --print-prog-name <arg>

打印 <name> 的完整程序路径

-print-resource-dir, --print-resource-dir

打印资源目录路径名

-print-rocm-search-dirs, --print-rocm-search-dirs

打印用于查找 ROCm 安装的路径

-print-runtime-dir, --print-runtime-dir

打印包含 Clang 运行时库的目录路径名

-print-search-dirs, --print-search-dirs

打印用于查找库和程序的路径

-print-supported-extensions, --print-supported-extensions

打印支持的 -march 扩展(仅限 RISC-V、AArch64 和 ARM)

-print-target-triple, --print-target-triple

打印规范化的目标三元组

-print-targets, --print-targets

打印注册的目标

-private_bundle
--product-name=<arg>
-pthread, -no-pthread

在生成的代码中支持 POSIX 线程

-pthreads
-read_only_relocs <arg>
-reexport-l<arg>
-reexport_framework <arg>
-reexport_library<arg>
-relocatable-pch, --relocatable-pch

是否构建可重定位的预编译头文件

-remap
-rewrite-legacy-objc

将旧版 Objective-C 源代码重写为 C++

-rtlib=<arg>, --rtlib=<arg>, --rtlib <arg>

要使用的编译器运行时库

-save-stats=<arg>, --save-stats=<arg>, -save-stats (equivalent to -save-stats=cwd), --save-stats (equivalent to -save-stats=cwd)

保存 llvm 统计信息。

-save-temps=<arg>, --save-temps=<arg>, -save-temps (equivalent to -save-temps=cwd), --save-temps (equivalent to -save-temps=cwd)

保存中间编译结果。<arg> 可以设置为 'cwd' 表示当前工作目录,或 'obj' 表示将临时文件保存到与最终输出文件相同的目录中

-sectalign <arg1> <arg2> <arg3>
-sectcreate <arg1> <arg2> <arg3>
-sectobjectsymbols <arg1> <arg2>
-sectorder <arg1> <arg2> <arg3>
-seg1addr<arg>
-seg_addr_table <arg>
-seg_addr_table_filename <arg>
-segaddr <arg1> <arg2>
-segcreate <arg1> <arg2> <arg3>
-seglinkedit
-segprot <arg1> <arg2> <arg3>
-segs_read_<arg>
-segs_read_only_addr <arg>
-segs_read_write_addr <arg>
-serialize-diagnostics <arg>, --serialize-diagnostics <arg>

将编译器诊断信息序列化到文件

-shared-libgcc
-shared-libsan, -shared-libasan

动态链接消毒器运行时

-single_module
--start-no-unused-arguments

对于以下参数,不要发出关于未使用参数的警告

-static-libgcc
-static-libsan, -static-libasan

静态链接消毒器运行时(在 darwin 上不支持 ASan、TSan 或 UBSan)

-static-libstdc++
-static-openmp

在链接时使用静态主机 OpenMP 运行时。

-std-default=<arg>
-stdlib=<arg>, --stdlib=<arg>, --stdlib <arg>

要使用的 C++ 标准库。<arg> 必须是 'libc++'、'libstdc++' 或 'platform'。

-sub_library<arg>
-sub_umbrella<arg>
--symbol-graph-dir=<arg>

要发出符号图的目录。

--sysroot=<arg>, --sysroot <arg>
--target-help
--target=<arg>, -target <arg>

为给定的目标生成代码

-time

计时各个命令

-traditional, --traditional
-traditional-cpp, --traditional-cpp

启用一些传统的 C++ 模拟

-twolevel_namespace
-twolevel_namespace_hints
-umbrella <arg>
-unexported_symbols_list <arg>
-unwindlib=<arg>, --unwindlib=<arg>

要使用的展开库。<arg> 必须为 ‘libgcc’、‘unwindlib’ 或 ‘platform’。

-v, --verbose

显示要运行的命令并使用详细输出

--verify-debug-info

验证调试输出的二进制表示

--version

打印版本信息

-vfsoverlay<arg>, --vfsoverlay<arg>

将文件描述的虚拟文件系统覆盖到真实文件系统。此外,如果链接器支持,将此覆盖文件传递给链接器。

-w, --no-warnings

抑制所有警告

-weak-l<arg>
-weak_framework <arg>
-weak_library <arg>
-weak_reference_mismatches <arg>
-whatsloaded
-why_load, -whyload
-working-directory <arg>, -working-directory=<arg>

解析相对于指定目录的文件路径

-x<language>, --language <arg>, --language=<arg>

将后续输入文件视为类型 <language>

-y<arg>

操作

对输入执行的操作。

-E, --preprocess

只运行预处理器

-S, --assemble

只运行预处理和编译步骤

-c, --compile

只运行预处理、编译和汇编步骤

-emit-cir

构建 AST,然后降低到 ClangIR

-emit-interface-stubs

生成接口存根文件。

-emit-llvm

对汇编程序和目标文件使用 LLVM 表示

-emit-merged-ifs

生成接口存根文件,发出合并的文本而不是二进制文件。

-extract-api

提取 API 信息

-fdriver-only

只运行驱动程序。

-fsyntax-only

运行预处理器、解析器和语义分析阶段

-module-file-info

提供有关特定模块文件的信息

--precompile

只预编译输入

-rewrite-objc

将 Objective-C 源代码重写为 C++

-verify-pch

加载并验证预编译的头文件是否陈旧

编译选项

控制 Clang 在编译期间的行为的标志。这些标志对不执行编译的操作没有影响。

-Xassembler <arg>

将 <arg> 传递给汇编程序

-Xclang <arg>, -Xclang=<arg>

将 <arg> 传递给 clang -cc1

-Xopenmp-target <arg>

将 <arg> 传递给目标卸载工具链。

-Xopenmp-target=<triple> <arg>

将 <arg> 传递给由 <triple> 标识的目标卸载工具链。

-ansi, --ansi
-fapinotes, -fno-apinotes

启用外部 API 笔记支持

-fapinotes-modules, -fno-apinotes-modules

启用基于模块的外部 API 笔记支持

-fapinotes-swift-version=<version>

指定在筛选 API 笔记时要使用的 Swift 版本

-fc++-abi=<arg>

要使用的 C++ ABI。这将覆盖目标 C++ ABI。

-fclang-abi-compat=<version>

尝试匹配 Clang <version> 的 ABI。<version> 必须为 ‘<major>.<minor>’ 或 ‘latest’。

-fcomment-block-commands=<arg>,<arg2>...

将 <arg> 中每个逗号分隔的参数视为文档注释块命令

-fcomplete-member-pointers, -fno-complete-member-pointers

如果成员指针基类型在 Microsoft ABI 下具有意义,则要求它们完整

-fcrash-diagnostics-dir=<dir>

将崩溃报告文件放在 <dir> 中

-fcrash-diagnostics=<arg>, -fcrash-diagnostics (equivalent to -fcrash-diagnostics=compiler)

设置崩溃诊断报告级别(选项:off、compiler、all)

-fdeclspec, -fno-declspec

允许 __declspec 作为关键字

-fdepfile-entry=<arg>
-fdiagnostics-fixit-info, -fno-diagnostics-fixit-info
-fdiagnostics-format=<arg>
-fdiagnostics-parseable-fixits

以机器可解析的形式打印修复信息

-fdiagnostics-print-source-range-info

以数字形式打印源范围跨度

-fdiagnostics-show-category=<arg>
-fdiscard-value-names, -fno-discard-value-names

在 LLVM IR 中丢弃值名称

-fexperimental-relative-c++-abi-vtables, -fno-experimental-relative-c++-abi-vtables

对于具有虚表的类,使用实验性的 C++ 类 ABI

-fexperimental-strict-floating-point

在尚未准备好的目标上启用使用非默认舍入模式和非默认异常处理。

-ffine-grained-bitfield-accesses, -fno-fine-grained-bitfield-accesses

对具有合法宽度和对齐方式的连续位域运行使用单独的访问。

-fglobal-isel, -fexperimental-isel, -fno-global-isel

启用全局指令选择器

-finline-functions, -fno-inline-functions

内联合适的函数

-finline-hint-functions

内联(显式或隐式)标记为内联的函数

-fno-sanitize-ignorelist

不要对消毒器使用忽略列表文件

-fparse-all-comments
-frandomize-layout-seed-file=<file>

包含随机化结构布局功能使用的种子的文件

-frandomize-layout-seed=<seed>

随机化结构布局功能使用的种子

-fsanitize-address-destructor=<arg>

设置 AddressSanitizer 编译器生成的模块析构函数的类型。当代码卸载(例如通过 `dlclose()`)时,这些析构函数被用来注销已编译的全局变量。<arg> 必须是 ‘none’ 或 ‘global’。

-fsanitize-address-field-padding=<arg>

AddressSanitizer 的字段填充级别

-fsanitize-address-globals-dead-stripping, -fno-sanitize-address-globals-dead-stripping

在 AddressSanitizer 中启用链接器对全局变量的死代码消除

-fsanitize-address-outline-instrumentation, -fno-sanitize-address-outline-instrumentation

始终为地址消毒器编译器生成函数调用

在 AddressSanitizer 中,使用自定义 operator new[] 分配数组时启用“poisoning”数组 cookie,防止用户代码访问 cookie。数组 cookie 是一个小的实现定义的标头,添加到某些数组分配中,以记录元数据,如数组的长度。用户代码对数组 cookie 的访问在技术上是允许的,但更有可能是由于数组越界访问造成的。

如果 operator new[] 不是 C++ 标准库提供的分配函数之一,那么它就是“自定义”的。来自非自定义分配函数的数组 cookie 始终是被 poisoned 的。

-fsanitize-address-use-after-return=<mode>

在 AddressSanitizer 中选择检测栈使用后返回的模式。<mode> 必须是 ‘never’、’runtime’ 或 ‘always’。

-fsanitize-address-use-after-scope, -fno-sanitize-address-use-after-scope

在 AddressSanitizer 中启用使用后作用域检测

-fsanitize-address-use-odr-indicator, -fno-sanitize-address-use-odr-indicator

启用 ODR 指示器全局变量,以避免在部分消毒的程序中出现错误的 ODR 违反报告,但会增加二进制文件的大小

-fsanitize-cfi-canonical-jump-tables, -fno-sanitize-cfi-canonical-jump-tables

在符号表中使跳转表地址规范

-fsanitize-cfi-cross-dso, -fno-sanitize-cfi-cross-dso

启用跨 DSO 调用的控制流完整性 (CFI) 检查。

-fsanitize-cfi-icall-experimental-normalize-integers

在 CFI 间接调用类型签名检查中规范整数

-fsanitize-cfi-icall-generalize-pointers

在 CFI 间接调用类型签名检查中泛化指针

-fsanitize-coverage-allowlist=<arg>

将消毒器覆盖编译器仅限于与提供的特殊情况列表匹配的模块和函数,但排除被阻止的函数

-fsanitize-coverage-ignorelist=<arg>

即使是允许的模块和函数,也会禁用对匹配所提供特殊情况列表的模块和函数的消毒程序覆盖率检测。

-fsanitize-coverage=<arg1>,<arg2>..., -fno-sanitize-coverage=<arg1>,<arg2>...

指定消毒程序的覆盖率检测类型。

-fsanitize-hwaddress-abi=<arg>

选择要针对的 HWAddressSanitizer ABI(拦截器或平台,默认拦截器)。此选项目前未被使用。

-fsanitize-hwaddress-experimental-aliasing, -fno-sanitize-hwaddress-experimental-aliasing

在 HWAddressSanitizer 中启用别名模式。

-fsanitize-ignorelist=<arg>

指向消毒程序忽略列表文件的路径。

-fsanitize-memory-track-origins=<arg>, -fsanitize-memory-track-origins (equivalent to -fsanitize-memory-track-origins=2)

在 MemorySanitizer 中启用来源跟踪。

-fsanitize-memory-use-after-dtor, -fno-sanitize-memory-use-after-dtor

在 MemorySanitizer 中启用析构后使用检测。

-fsanitize-memtag-mode=<arg>

将默认 MTE 模式设置为“sync”(默认)或“async”。

-fsanitize-minimal-runtime, -fno-sanitize-minimal-runtime
-fsanitize-recover=<arg1>,<arg2>..., -fno-sanitize-recover=<arg1>,<arg2>..., -fsanitize-recover (equivalent to -fsanitize-recover=all)

为指定的消毒程序启用恢复。

-fsanitize-stats, -fno-sanitize-stats

启用消毒程序统计信息收集。

-fsanitize-thread-atomics, -fno-sanitize-thread-atomics

在 ThreadSanitizer 中启用原子操作检测(默认)。

-fsanitize-thread-func-entry-exit, -fno-sanitize-thread-func-entry-exit

在 ThreadSanitizer 中启用函数入口/退出检测(默认)。

-fsanitize-thread-memory-access, -fno-sanitize-thread-memory-access

在 ThreadSanitizer 中启用内存访问检测(默认)。

-fsanitize-trap=<arg1>,<arg2>..., -fno-sanitize-trap=<arg1>,<arg2>..., -fsanitize-trap (equivalent to -fsanitize-trap=all), -fsanitize-undefined-trap-on-error (equivalent to -fsanitize-trap=undefined)

为指定的消毒程序启用陷阱。

-fsanitize-undefined-strip-path-components=<number>

在发出检查元数据时,剥离(或保留,如果为负数)给定数量的路径组件。

-fsanitize=<check>,<arg2>..., -fno-sanitize=<arg1>,<arg2>...

针对各种形式的未定义或可疑行为打开运行时检查。有关可用检查,请参阅用户手册。

-fverify-intermediate-code, -fno-verify-intermediate-code

启用 LLVM IR 的验证。

-mno-fmv

禁用函数多版本化。

-moutline, -mno-outline

启用函数外联(仅限 AArch64)。

-moutline-atomics, -mno-outline-atomics

生成对行外原子操作的本地调用。

--param <arg>, --param=<arg>
-print-supported-cpus, --print-supported-cpus, -mcpu=help, -mtune=help

打印给定目标支持的 CPU 模型(如果未指定目标,它将打印默认目标支持的 CPU)。

-std=<arg>, --std=<arg>, --std <arg>

要编译的语言标准。

预处理器选项

控制 Clang 预处理器行为的标志。

-C, --comments

在预处理输出中包含注释。

-CC, --comments-in-macros

在预处理输出中包含宏内的注释

-D<macro>=<value>, --define-macro <arg>, --define-macro=<arg>

将 <macro> 定义为 <value>(如果省略 <value> 则为 1)

-H, --trace-includes

显示头文件包含和嵌套深度

-P, --no-line-commands

在 -E 模式下禁用行标记输出

-U<macro>, --undefine-macro <arg>, --undefine-macro=<arg>

取消定义宏 <macro>

-Wp,<arg>,<arg2>...

将 <arg> 中用逗号分隔的参数传递给预处理器

-Xpreprocessor <arg>

将 <arg> 传递给预处理器

--embed-dir=<dir>

将目录添加到嵌入搜索路径

包含路径管理

控制如何将 #include 解析为文件的标志。

-I<dir>, --include-directory <arg>, --include-directory=<arg>

将目录添加到包含搜索路径。对于 C++ 输入,如果有多个 -I 选项,这些目录将按照它们给出的顺序进行搜索,然后再搜索标准系统目录。如果同一个目录位于 SYSTEM 包含搜索路径中,例如,如果也使用 -isystem 指定,则 -I 选项将被忽略

-I-, --include-barrier

将所有先前的 -I 标志限制为双引号包含,并将当前目录从包含路径中删除

-cxx-isystem<directory>

将目录添加到 C++ SYSTEM 包含搜索路径

-fbuild-session-file=<file>

使用 <file> 的最后修改时间作为构建会话时间戳

-fbuild-session-timestamp=<time since Epoch in seconds>

当前构建会话开始的时间

-fmodule-file=\[<name>=\]<file>

指定模块名称到预编译模块文件的映射,或者如果省略名称则加载模块文件。

-fmodules-cache-path=<directory>

指定模块缓存路径

-fmodules-disable-diagnostic-validation

在加载模块时禁用对诊断选项的验证

-fmodules-prune-after=<seconds>

指定模块文件将被视为未使用的间隔(以秒为单位)

-fmodules-prune-interval=<seconds>

指定尝试修剪模块缓存的间隔(以秒为单位)

-fmodules-user-build-path <directory>

指定模块用户构建路径

-fmodules-validate-once-per-build-session

如果模块已在此构建会话期间成功验证或加载,则不要验证模块的输入文件

-fmodules-validate-system-headers, -fno-modules-validate-system-headers

在加载模块时验证模块所依赖的系统头文件

-fprebuilt-module-path=<directory>

指定预构建模块路径

-iapinotes-modules<directory>

将目录添加到模块名称引用的 API 说明搜索路径

-ibuiltininc

即使在 -nostdinc 之前或之后使用 -ibuiltininc,也启用内置 #include 目录。在选项之后使用 -nobuiltininc 将禁用它

-idirafter<arg>, --include-directory-after <arg>, --include-directory-after=<arg>

将目录添加到 AFTER 包含搜索路径

-iframework<arg>

将目录添加到 SYSTEM 框架搜索路径

-iframeworkwithsysroot<directory>

将目录添加到 SYSTEM 框架搜索路径,绝对路径相对于 -isysroot

-imacros<file>, --imacros<file>, --imacros=<arg>

在解析之前从文件中包含宏

-include<file>, --include<file>, --include=<arg>

在解析之前包含文件

-include-pch <file>

包含预编译头文件

-iprefix<dir>, --include-prefix <arg>, --include-prefix=<arg>

设置 -iwithprefix/-iwithprefixbefore 前缀

-iquote<directory>

将目录添加到 QUOTE 包含搜索路径

-isysroot<dir>

设置系统根目录(通常为 /)

-isystem<directory>

将目录添加到 SYSTEM 包含搜索路径

-isystem-after<directory>

将目录添加到 SYSTEM 包含搜索路径的末尾

-ivfsoverlay<arg>

将文件描述的虚拟文件系统覆盖在真实文件系统之上

-iwithprefix<dir>, --include-with-prefix <arg>, --include-with-prefix-after <arg>, --include-with-prefix-after=<arg>, --include-with-prefix=<arg>

将目录设置为带前缀的系统包含搜索路径

-iwithprefixbefore<dir>, --include-with-prefix-before <arg>, --include-with-prefix-before=<arg>

将目录设置为带前缀的包含搜索路径

-iwithsysroot<directory>

将目录添加到系统包含搜索路径,绝对路径相对于 -isysroot

--libomptarget-amdgpu-bc-path=<arg>, --libomptarget-amdgcn-bc-path=<arg>

libomptarget-amdgcn 位码库的路径

--libomptarget-nvptx-bc-path=<arg>

libomptarget-nvptx 位码库的路径

-nobuiltininc

仅禁用内置 #include 目录

-nogpuinc, -nocudainc

不添加 CUDA/HIP 的包含路径,也不包含默认的 CUDA/HIP 包装器头文件

-nohipwrapperinc

不包含默认的 HIP 包装器头文件和包含路径

-nostdinc, --no-standard-includes

禁用标准系统 #include 目录和内置 #include 目录

-nostdinc++

禁用 C++ 标准库的标准 #include 目录

-nostdlibinc

仅禁用标准系统 #include 目录

-stdlib++-isystem<directory>

将目录用作 C++ 标准库包含路径

--system-header-prefix=<prefix>, --no-system-header-prefix=<prefix>, --system-header-prefix <arg>

将所有以 <prefix> 开头的 #include 路径视为包含系统头文件。

依赖文件生成

控制为类似 make 的构建系统生成依赖文件的标志。

-M, --dependencies

类似于 -MD,但同时也隐含 -E 并且默认写入标准输出

-MD, --write-dependencies

写入包含用户和系统头文件的 depfile

-MF<file>

将 -MMD、-MD、-MM 或 -M 的 depfile 输出写入 <file>

-MG, --print-missing-file-dependencies

将缺少的头文件添加到 depfile

-MJ<arg>

为每个输入写入一个编译数据库条目

-MM, --user-dependencies

类似于 -MMD,但同时也隐含 -E 并且默认写入标准输出

-MMD, --write-user-dependencies

写入包含用户头文件的 depfile

-MP

为每个依赖项(主文件除外)创建假目标

-MQ<arg>

指定在 depfile 中引用的主文件输出名称

-MT<arg>

指定 depfile 中的主文件输出名称

-MV

对 depfile 使用 NMake/Jom 格式

转储预处理器状态

允许以各种方式转储预处理器状态的标志。

-d
-d<arg>
-dD

除了正常输出外,在 -E 模式下打印宏定义

-dI

除了正常输出外,在 -E 模式下打印包含指令

-dM

在 -E 模式下打印宏定义,而不是正常输出

诊断选项

控制 Clang 将生成哪些警告、错误和备注的标志。请参见 警告和备注标志的完整列表

-R<remark>

启用指定的备注

-Rpass-analysis=<arg>

报告与给定 POSIX 正则表达式匹配的优化传递的转换分析

-Rpass-missed=<arg>

报告与给定 POSIX 正则表达式匹配的优化传递的未执行转换

-Rpass=<arg>

报告与给定 POSIX 正则表达式匹配的优化传递执行的转换

-W<warning>, --extra-warnings, -fheinous-gnu-extensions (equivalent to -Wno-error=invalid-gnu-asm-cast), --warn-<arg>, --warn-=<arg>

启用指定的警告

-Wframe-larger-than=<arg>, -Wframe-larger-than
-Wnonportable-cfstrings<arg>, -Wno-nonportable-cfstrings<arg>

目标无关编译选项

-fPIC, -fno-PIC
-fPIE, -fno-PIE
-faccess-control, -fno-access-control
-faddrsig, -fno-addrsig

生成地址显著性表

-falign-functions, -fno-align-functions
-falign-functions=<arg>
-falign-loops=<N>

N 必须是 2 的幂。将循环对齐到边界

-faligned-allocation, -faligned-new, -fno-aligned-allocation

启用 C++17 对齐分配函数

-fallow-editor-placeholders, -fno-allow-editor-placeholders

将编辑器占位符视为有效的源代码

-fallow-unsupported
-faltivec, -fno-altivec
-faltivec-src-compat=<arg>

Altivec 向量的源代码级兼容性(适用于 PowerPC 目标)。这包括向量比较的结果(‘xl’ 的标量,‘gcc’ 的向量)以及用标量初始化时的行为(‘xl’ 的扩展,‘gcc’ 的仅元素零)。对于‘mixed’,兼容性与‘gcc’ 的‘vector bool/vector pixel’ 和‘xl’ 的其他类型相同。当前默认值为‘mixed’。<arg> 必须为‘mixed’,‘gcc’ 或‘xl’。

-fandroid-pad-segment, -fno-android-pad-segment
-fansi-escape-codes

对诊断使用 ANSI 转义代码

-fapple-kext, -findirect-virtual-calls, -fterminated-vtables

使用 Apple 的内核扩展 ABI

强制链接 clang 内置运行时库

-fapple-pragma-pack, -fno-apple-pragma-pack

启用 Apple gcc 兼容的 #pragma pack 处理

-fapplication-extension, -fno-application-extension

将代码限制为 App Extensions 可用的代码

-fapprox-func, -fno-approx-func

允许将某些数学函数调用替换为近似等效的计算

-fasm, -fno-asm
-fasm-blocks, -fno-asm-blocks
-fassociative-math, -fno-associative-math
-fassume-nothrow-exception-dtor, -fno-assume-nothrow-exception-dtor

假设异常对象的析构函数是非抛出的

-fassume-sane-operator-new, -fno-assume-sane-operator-new
-fassume-unique-vtables, -fno-assume-unique-vtables
-fassumptions, -fno-assumptions
-fast
-fastcp
-fastf
-fasync-exceptions, -fno-async-exceptions

启用 EH 异步异常

-fasynchronous-unwind-tables, -fno-asynchronous-unwind-tables
-fauto-import, -fno-auto-import

MinGW 特定。启用对自动 dllimport 的代码生成支持,并在链接器中启用对其的支持。默认情况下启用。

-fbasic-block-address-map, -fno-basic-block-address-map

发出基本块地址映射节。

-fbasic-block-sections=<arg>

将每个基本块或基本块子集放置在自己的节中。<arg> 必须是 'all'、'none' 或 'list='。

-fbinutils-version=<major.minor>

生成的的目标文件可以使用此 binutils 版本及更高版本支持的所有 ELF 功能。如果指定了 -fno-integrated-as,则生成的汇编将考虑 GNU as 支持。'none' 表示可以使用所有 ELF 功能,而无论 binutils 支持与否。默认为 2.26。

-fblocks, -fno-blocks

启用 'blocks' 语言功能

-fbootclasspath=<arg>, --bootclasspath <arg>, --bootclasspath=<arg>
-fborland-extensions, -fno-borland-extensions

接受 Borland 编译器支持的非标准结构

-fbracket-depth=<arg>
-fbuiltin, -fno-builtin
-fbuiltin-module-map

加载 clang 内置模块映射文件。

-fc++-static-destructors=<arg>, -fc++-static-destructors (equivalent to -fc++-static-destructors=all), -fno-c++-static-destructors (equivalent to -fc++-static-destructors=none)

控制为哪些变量注册 C++ 静态析构函数。<arg> 必须是 'all'、'thread-local' 或 'none'。

-fcaret-diagnostics, -fno-caret-diagnostics
-fcaret-diagnostics-max-lines=<arg>

设置在插入符诊断中显示的源代码行的最大数量(0 = 无限制)。

-fcf-protection=<arg>, -fcf-protection (equivalent to -fcf-protection=full)

检测控制流架构保护。<arg> 必须是 'return'、'branch'、'full' 或 'none'。

-fcf-runtime-abi=<arg>

<arg> 必须是 'unspecified'、'standalone'、'objc'、'swift'、'swift-5.0'、'swift-4.2' 或 'swift-4.1'。

-fchar8_t, -fno-char8_t

启用 C++ 内置类型 char8_t

-fclangir, -fno-clangir

使用 ClangIR 管道编译

-fclasspath=<arg>, --CLASSPATH <arg>, --CLASSPATH=<arg>, --classpath <arg>, --classpath=<arg>
-fcodegen-data-generate=<path>, -fcodegen-data-generate (equivalent to -fcodegen-data-generate=default.cgdata)

将代码生成数据发射到目标文件中。LLD for MachO(目前)将它们合并到指定的 <path> 中。

-fcodegen-data-use=<path>, -fcodegen-data-use (equivalent to -fcodegen-data-use=default.cgdata)

使用从指定的 <path> 读取的代码生成数据。

-fcolor-diagnostics, -fdiagnostics-color, -fno-color-diagnostics

启用诊断中的颜色

-fcommon, -fno-common

将没有存储类和没有初始化程序的变量的定义(尝试性定义)放在公共块中,而不是生成单独的零初始化定义(默认 -fno-common)。

-fcompile-resource=<arg>, --resource <arg>, --resource=<arg>
-fcomplex-arithmetic=<arg>

<arg> 必须是 'full'、'improved'、'promoted' 或 'basic'。

-fconstant-cfstrings, -fno-constant-cfstrings
-fconstant-string-class=<arg>
-fconstexpr-backtrace-limit=<arg>

设置在 constexpr 评估回溯中打印的条目的最大数量(0 = 无限制)

-fconstexpr-depth=<arg>

设置递归 constexpr 函数调用的最大深度

-fconstexpr-steps=<arg>

设置 constexpr 函数评估中的最大步骤数

-fcoro-aligned-allocation, -fno-coro-aligned-allocation

为 C++ 协程首选对齐分配

-fcoroutines, -fno-coroutines

启用对 C++ 协程的支持

-fcoverage-compilation-dir=<arg>

要嵌入覆盖映射中的编译目录。

-fcoverage-mapping, -fno-coverage-mapping

生成覆盖率映射以启用代码覆盖率分析

-fcoverage-mcdc, -fno-coverage-mcdc

在生成代码覆盖率时启用 MC/DC 准则

-fcoverage-prefix-map=<old>=<new>

在覆盖率映射中将文件源路径 <old> 重新映射到 <new>。如果有多个选项,则从最后一个选项开始,以相反的顺序应用前缀替换

-fcreate-profile
-fcs-profile-generate

生成经过插桩的代码以收集上下文敏感执行计数到 default.profraw (由 LLVM_PROFILE_FILE 环境变量覆盖)

-fcs-profile-generate=<directory>

生成经过插桩的代码以收集上下文敏感执行计数到 <directory>/default.profraw (由 LLVM_PROFILE_FILE 环境变量覆盖)

-fcxx-exceptions, -fno-cxx-exceptions

启用 C++ 异常

-fcxx-modules, -fno-cxx-modules

启用 C++ 模块

-fdata-sections, -fno-data-sections

将每个数据放在其自己的节中

-fdebug-compilation-dir=<arg>, -fdebug-compilation-dir <arg>

要嵌入到调试信息中的编译目录

-fdebug-default-version=<arg>

要使用的默认 DWARF 版本,如果 -g 选项导致生成 DWARF 调试信息

-fdebug-info-for-profiling, -fno-debug-info-for-profiling

发出额外的调试信息以使样本配置文件更准确

-fdebug-macro, -fno-debug-macro

发出宏调试信息

-fdebug-pass-arguments
-fdebug-pass-structure
-fdebug-prefix-map=<old>=<new>

对于调试信息中的路径,将目录 <old> 重新映射到 <new>。如果多个选项匹配某个路径,则最后一个选项获胜

-fdebug-ranges-base-address, -fno-debug-ranges-base-address

在 .debug_ranges 中使用 DWARF 基地址选择条目

-fdebug-types-section, -fno-debug-types-section

将调试类型放在其自己的节中 (仅限 ELF)

-fdefine-target-os-macros, -fno-define-target-os-macros

启用预定义的目标操作系统宏

-fdelayed-template-parsing, -fno-delayed-template-parsing

在翻译单元的末尾解析模板化函数定义

-fdelete-null-pointer-checks, -fno-delete-null-pointer-checks

启用后,将空指针解引用、创建对空的引用或将空指针传递给用“nonnull”属性注释的函数参数视为未定义行为。 (因此,优化器可以假设在以这种方式使用的任何指针都不可能是空值,并相应地优化掉分支。 默认情况下开启。

-fdenormal-fp-math=<arg>
-fdiagnostics-absolute-paths

在诊断中打印绝对路径

-fdiagnostics-color=<arg>

何时在诊断中使用颜色。 <arg> 必须是 ‘auto’,‘always’ 或 ‘never’。

-fdiagnostics-hotness-threshold=<value>

如果优化备注的配置文件计数至少不达到该值,则阻止输出优化备注。 使用 ‘auto’ 应用来自配置文件摘要的阈值

-fdiagnostics-misexpect-tolerance=<value>

如果配置文件计数在预期值的 N% 之内,则阻止输出 misexpect 诊断。

-fdiagnostics-show-hotness, -fno-diagnostics-show-hotness

在诊断行中启用配置文件热门信息

-fdiagnostics-show-line-numbers, -fno-diagnostics-show-line-numbers
-fdiagnostics-show-note-include-stack, -fno-diagnostics-show-note-include-stack

显示诊断注释的包含堆栈

-fdiagnostics-show-option, -fno-diagnostics-show-option

使用可映射的诊断打印选项名称

-fdiagnostics-show-template-tree

为不同的模板打印模板比较树

-fdigraphs, -fno-digraphs

启用替代令牌表示‘<:’,‘:>’,‘<%’,‘%>’,‘%:’,‘%:%:’ (默认)

-fdirect-access-external-data, -fno-direct-access-external-data

不要使用 GOT 间接寻址来引用外部数据符号

-fdirectives-only, -fno-directives-only
-fdisable-block-signature-string, -fno-disable-block-signature-string

禁用块签名字符串

-fdollars-in-identifiers, -fno-dollars-in-identifiers

允许标识符中使用‘$’

-fdouble-square-bracket-attributes, -fno-double-square-bracket-attributes
-fdwarf-directory-asm, -fno-dwarf-directory-asm
-fdwarf-exceptions

使用 DWARF 风格的异常

-felide-constructors, -fno-elide-constructors
-feliminate-unused-debug-symbols, -fno-eliminate-unused-debug-symbols
-feliminate-unused-debug-types, -fno-eliminate-unused-debug-types

不要为已定义但未使用的类型发出调试信息

-fembed-bitcode=<option>, -fembed-bitcode (equivalent to -fembed-bitcode=all), -fembed-bitcode-marker (equivalent to -fembed-bitcode=marker)

嵌入 LLVM 位码。<option> 必须是 ‘off’, ‘all’, ‘bitcode’ 或 ‘marker’。

-fembed-offload-object=<arg>

将卸载设备端二进制文件嵌入到主机目标文件作为节。

-femit-all-decls

发出所有声明,即使未使用

-femit-compact-unwind-non-canonical, -fno-emit-compact-unwind-non-canonical

尝试为非规范条目发出紧凑型展开。可能被其他约束覆盖

-femit-dwarf-unwind=<arg>

何时发出 DWARF 展开(EH 帧)信息。<arg> 必须是 ‘always’, ‘no-compact-unwind’ 或 ‘default’。

-femulated-tls, -fno-emulated-tls

使用 emutls 函数访问 thread_local 变量

-fenable-matrix

启用矩阵数据类型和相关的内置函数

-fencoding=<arg>, --encoding <arg>, --encoding=<arg>
-ferror-limit=<arg>
-fescaping-block-tail-calls, -fno-escaping-block-tail-calls
-fexceptions, -fno-exceptions

启用对异常处理的支持

-fexcess-precision=<arg>

允许在目标不支持精度类型的平台上控制精度。默认情况下,使用精度来计算遵循 ISO C99 规范的中间结果。<arg> 必须是 ‘standard’, ‘fast’ 或 ‘none’。

-fexec-charset=<arg>
-fexperimental-late-parse-attributes, -fno-experimental-late-parse-attributes

启用实验性的属性延迟解析

-fexperimental-library, -fno-experimental-library

控制是否启用不稳定和实验性的库特性。此选项启用各种库特性,这些特性要么是实验性的(也称为 TSes),要么在所选的标准库实现中已经过时,但尚未稳定。不建议在生产代码中使用此选项,因为 ABI 和 API 的稳定性都没有保证。这旨在为实验目的提供对未来将发布的功能的预览

-fexperimental-modules-reduced-bmi

生成简化的 BMI

-fexperimental-new-constant-interpreter

启用实验性的新的常量解释器

-fexperimental-openacc-macro-override <arg>, -fexperimental-openacc-macro-override=<arg>

在 OpenACC 支持开发期间,覆盖用于实验测试的 _OPENACC 宏值

-fexperimental-sanitize-metadata-ignorelist=<arg>

禁用与提供的特殊情况列表匹配的模块和函数的消毒剂元数据

-fexperimental-sanitize-metadata=<arg1>,<arg2>..., -fno-experimental-sanitize-metadata=<arg1>,<arg2>...

指定为二进制分析消毒剂发出元数据的类型

-fextdirs=<arg>, --extdirs <arg>, --extdirs=<arg>
-fextend-arguments=<arg>

控制在调用未原型化和可变参数函数时如何扩展标量整数参数。<arg> 必须是 ‘32’ 或 ‘64’。

-ffast-math, -fno-fast-math

允许积极的、有损的浮点优化

-ffat-lto-objects, -fno-fat-lto-objects

启用胖 LTO 对象支持

-ffile-compilation-dir=<arg>

在调试信息和覆盖映射中嵌入的编译目录。

-ffile-prefix-map=<arg>

重新映射调试信息、预定义预处理器宏和 __builtin_FILE() 中的文件源路径。隐含 -ffile-reproducible。

-ffile-reproducible, -fno-file-reproducible

在扩展 __FILE__ 宏时使用目标的平台特定路径分隔符字符。

-ffinite-loops, -fno-finite-loops

假设所有非平凡循环都是有限的。

-ffixed-point, -fno-fixed-point

启用定点类型。

-ffixed-r19

保留寄存器 r19(仅限 Hexagon)。

-ffor-scope, -fno-for-scope
-fforce-check-cxx20-modules-input-files

显式检查 C++20 模块的输入源文件。

-fforce-dwarf-frame, -fno-force-dwarf-frame

始终发出调试帧部分。

-fforce-emit-vtables, -fno-force-emit-vtables

为了改进去虚拟化,强制发出 vtable,即使在不需要的模块中也是如此。它会导致发出更多内联虚函数。

-fforce-enable-int128, -fno-force-enable-int128

启用对 int128_t 类型的支持。

-ffp-contract=<arg>

形成融合的 FP 操作(例如 FMA):fast(跨语句融合,不考虑 pragma) | on(仅在同一语句中融合,除非受 pragma 指示) | off(永不融合) | fast-honor-pragmas(跨语句融合,除非受 pragma 指示)。默认情况下,CUDA 为“fast”,HIP 为“fast-honor-pragmas”,否则为“on”。<arg> 必须为“fast”、“on”、“off”或“fast-honor-pragmas”。

-ffp-eval-method=<arg>

指定用于浮点运算的评估方法。<arg> 必须为“source”、“double”或“extended”。

-ffp-exception-behavior=<arg>

指定浮点运算的异常行为。<arg> 必须为“ignore”、“maytrap”或“strict”。

-ffp-model=<arg>

控制浮点计算的语义。

-ffreestanding

断言编译发生在独立环境中。

-ffunction-sections, -fno-function-sections

将每个函数放在它自己的部分中。

-fgnu-inline-asm, -fno-gnu-inline-asm
-fgnu-keywords, -fno-gnu-keywords

无论语言标准如何,都允许使用 GNU 扩展关键字。

-fgnu-runtime

生成与标准 GNU Objective-C 运行时兼容的输出。

-fgnu89-inline, -fno-gnu89-inline

使用 gnu89 内联语义。

-fgnuc-version=<arg>

设置各种宏以声明与给定的 GCC 版本兼容(默认值为 4.2.1)。

-fgpu-approx-transcendentals, -fcuda-approx-transcendentals, -fno-gpu-approx-transcendentals

使用近似超越函数。

-fhonor-infinities, -fhonor-infinities, -fno-honor-infinities

指定不允许假设参数和结果不是 +-inf 的浮点优化。

-fhonor-nans, -fno-honor-nans

指定不允许假设参数和结果不是 NAN 的浮点优化。

-fhosted
-fignore-exceptions

启用对忽略异常处理构造的支持。

-fimplicit-module-maps, -fmodule-maps, -fno-implicit-module-maps

隐式搜索文件系统以查找模块映射文件。

-fimplicit-modules, -fno-implicit-modules
-fincremental-extensions

启用增量处理扩展,例如处理全局范围内的语句。

-finline-max-stacksize=<arg>

抑制堆栈大小超过给定值的函数的内联。

-finput-charset=<arg>

指定源文件的默认字符集。

-finstrument-function-entry-bare

仅在内联后,在没有传递参数的情况下,对函数入口进行检测。

-finstrument-functions

生成调用以检测函数入口和出口。

-finstrument-functions-after-inlining

类似 -finstrument-functions,但在内联之后插入调用

-fintegrated-as, -fno-integrated-as, -integrated-as

启用集成汇编器

-fintegrated-cc1, -fno-integrated-cc1

在进程内运行 cc1

-fintegrated-objemitter, -fno-integrated-objemitter

使用内部机器对象代码发射器。

-fjmc, -fno-jmc

启用 just-my-code 调试

-fjump-tables, -fno-jump-tables

使用跳转表来降低开关

-fkeep-persistent-storage-variables, -fno-keep-persistent-storage-variables

启用保留所有具有持久存储持续时间的变量,包括全局变量、静态变量和线程局部变量,以确保它们可以被直接寻址

-fkeep-static-consts, -fno-keep-static-consts

即使未使用,也要保留静态常量变量

-fkeep-system-includes, -fno-keep-system-includes

在发出预处理器输出时,不扩展系统头文件,而是保留 #include 指令。当为测试用例缩减生成预处理输出时很有用。如果包含源文件中定义了控制包含内容的预处理器符号(例如 _XOPEN_SOURCE),则可能会产生错误的输出。结果源代码移植到其他编译环境的可能性无法保证。

仅对 -E 有效。

-flax-vector-conversions=<arg>, -flax-vector-conversions (equivalent to -flax-vector-conversions=integer), -fno-lax-vector-conversions (equivalent to -flax-vector-conversions=none)

启用隐式向量位转换。<arg> 必须为 ‘none’、‘integer’ 或 ‘all’。

-flimited-precision=<arg>
-flto-jobs=<arg>

控制 -flto=thin 的后端并行性(默认值为 0 表示线程数将从检测到的 CPU 数量推断而来)

-flto=<arg>, -flto (equivalent to -flto=full), -flto=auto (equivalent to -flto=full), -flto=jobserver (equivalent to -flto=full)

设置 LTO 模式。<arg> 必须为 ‘thin’ 或 ‘full’。

-fmacro-backtrace-limit=<arg>

设置宏展开回溯中要打印的条目数的最大值(0 = 无限制)

-fmacro-prefix-map=<arg>

重新映射预定义预处理器宏和 __builtin_FILE() 中的文件源路径。暗示 -ffile-reproducible。

-fmath-errno, -fno-math-errno

要求数学函数通过设置 errno 来指示错误

-fmax-tokens=<arg>

用于 -Wmax-tokens 的预处理令牌总数的最大值。

-fmax-type-align=<arg>

指定对缺少显式对齐的指针强制执行的最大对齐方式

-fmemory-profile, -fno-memory-profile

启用堆内存分析

-fmemory-profile-use=<pathname>

将内存分析用于 profile-guided 内存优化

-fmemory-profile=<directory>

启用堆内存分析并将结果转储到 <directory>

-fmerge-all-constants, -fno-merge-all-constants

允许合并常量

-fmessage-length=<arg>

格式化消息诊断,以便它们适合 N 列

-fminimize-whitespace, -fno-minimize-whitespace

在发出预处理器输出时,忽略输入文件中的空格。它只会在必要时包含空格,例如为了防止两个减号合并成一个增量运算符。与 -P 选项一起使用以规范化空格,以便只有格式更改的两个文件相等。

仅对 -E 有效,适用于类 C 输入,与 -traditional-cpp 不兼容。

-fmodule-file-deps, -fno-module-file-deps
-fmodule-header

从头文件构建 C++20 头文件单元

-fmodule-header=<kind>

从应该在用户 (fmodule-header=user) 或系统 (fmodule-header=system) 搜索路径中找到的头文件中构建 C++20 头文件单元。

-fmodule-map-file=<file>

加载此模块映射文件

-fmodule-name=<name>, -fmodule-implementation-of <arg>

指定要构建的模块的名称

允许在搜索路径的子目录中搜索模块映射

-fmodules, -fno-modules

启用 ‘modules’ 语言功能

-fmodules-decluse, -fno-modules-decluse

要求声明模块中使用的模块

-fmodules-ignore-macro=<arg>

在构建和加载模块时忽略给定宏的定义

-fmodules-search-all, -fno-modules-search-all

即使是非导入的模块,也要搜索以解析引用

-fmodules-strict-decluse

与 -fmodules-decluse 相似,但要求所有头文件都在模块中

-fmodules-validate-input-files-content

如果 mtime 不同,则根据内容验证 PCM 输入文件

-fms-compatibility, -fno-ms-compatibility

启用完全的 Microsoft Visual C++ 兼容性

-fms-compatibility-version=<arg>

表示在 _MSC_VER 中报告的 Microsoft 编译器版本号的点分隔值(0 = 不定义它(默认值))

-fms-define-stdc

在 MSVC 兼容模式下将 ' __STDC__ ' 定义为 '1'

-fms-extensions, -fno-ms-extensions

接受 Microsoft 编译器支持的一些非标准结构

-fms-hotpatch

确保所有函数都可以在运行时进行热补丁

-fms-memptr-rep=<arg>

<arg> 必须是 'single'、'multiple' 或 'virtual'。

-fms-omit-default-lib<arg>
-fms-runtime-lib=<arg>

指定 Visual Studio C 运行时库。“static” 和 “static_dbg” 对应于使用多线程静态版本的 cl 标志 /MT 和 /MTd。“dll” 和 “dll_dbg” 对应于使用多线程 dll 版本的 cl 标志 /MD 和 /MDd。<arg> 必须是 'static'、'static_dbg'、'dll' 或 'dll_dbg'。

-fms-volatile, -fno-ms-volatile

易失性加载和存储具有获取和释放语义

-fmsc-version=<arg>

要在 _MSC_VER 中报告的 Microsoft 编译器版本号(0 = 不定义它(默认值))

-fmudflap
-fmudflapth
-fnested-functions
-fnew-alignment=<align>, -fnew-alignment <arg>

指定 '::operator new(size_t)' 保证的最大对齐方式

-fnew-infallible, -fno-new-infallible

启用将抛出全局 C++ 运算符 new 视为始终返回有效内存(使用 __attribute__((returns_nonnull)) 和 throw() 进行注释)。这在源代码中是可检测的。

-fnext-runtime
-fno-builtin-<arg>

禁用特定函数的隐式内置知识

-fno-elide-type

打印诊断信息时不省略类型

-fno-knr-functions

禁用对 K&R C 函数声明的支持

-fno-max-type-align
-fno-modules-check-relocated<arg>

加载 PCM 文件时跳过对重新定位模块的检查

-fno-modules-validate-textual-header-includes

不要对文本头文件强制执行 -fmodules-decluse 和私有头文件限制。此标志将在未来的 Clang 版本中删除。

-fno-strict-modules-decluse
-fno-temp-file

直接创建编译输出文件。如果编译器崩溃,这可能会导致不正确的增量构建

-fno-working-directory
-fno_modules-validate-input-files-content
-fno_pch-validate-input-files-content
-fobjc-abi-version=<arg>
-fobjc-arc, -fno-objc-arc

为 Objective-C 指针合成保留和释放调用

-fobjc-arc-exceptions, -fno-objc-arc-exceptions

在 -fobjc-arc 中合成保留和释放时使用 EH 安全代码

-fobjc-avoid-heapify-local-blocks, -fno-objc-avoid-heapify-local-blocks

尝试避免将本地块堆化

-fobjc-convert-messages-to-runtime-calls, -fno-objc-convert-messages-to-runtime-calls
-fobjc-disable-direct-methods-for-testing

忽略属性 objc_direct,以便可以测试直接方法

-fobjc-encode-cxx-class-template-spec, -fno-objc-encode-cxx-class-template-spec

完全编码 c++ 类模板特化

-fobjc-exceptions, -fno-objc-exceptions

启用 Objective-C 异常

-fobjc-legacy-dispatch, -fno-objc-legacy-dispatch
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
-fobjc-nonfragile-abi-version=<arg>
-fobjc-runtime=<arg>

指定目标 Objective-C 运行时类型和版本

-fobjc-sender-dependent-dispatch
-fobjc-weak, -fno-objc-weak

在 Objective-C 中启用 ARC 风格的弱引用

-foffload-lto=<arg>, -foffload-lto (equivalent to -foffload-lto=full)

设置卸载编译的 LTO 模式。<arg> 必须是 'thin' 或 'full'。

-foffload-uniform-block, -cl-uniform-work-group-size, -fno-offload-uniform-block

假设内核使用统一的块大小启动(CUDA/HIP 默认值为 true,其他情况为 false)

-fomit-frame-pointer, -fno-omit-frame-pointer

从不需要帧指针的函数中省略帧指针。一些堆栈展开情况,如分析器和消毒器,可能更喜欢指定 -fno-omit-frame-pointer。在许多目标上,-O1 及更高版本默认会省略帧指针。-m[no-]omit-leaf-frame-pointer 优先于叶函数

-fopenacc

启用 OpenACC

-fopenmp, -fno-openmp

解析 OpenMP 指令并生成并行代码。

-fopenmp-extensions, -fno-openmp-extensions

启用 Clang 对 OpenMP 指令和子句的所有扩展

-fopenmp-force-usm

强制行为,就好像用户指定了 pragma omp requires unified_shared_memory。

-fopenmp-offload-mandatory

如果卸载到设备失败,则不创建主机回退。

-fopenmp-simd, -fno-openmp-simd

仅为基于 SIMD 的构造发出 OpenMP 代码。

-fopenmp-target-debug, -fno-openmp-target-debug

在 OpenMP 卸载设备 RTL 中启用调试

-fopenmp-target-jit

发出可以为 OpenMP 卸载进行 JIT 编译的代码。意味着 -foffload-lto=full

-fopenmp-version=<arg>

设置 OpenMP 版本(例如,OpenMP 4.5 为 45,OpenMP 5.1 为 51)。Clang 的默认值为 51

-fopenmp=<arg>
-foperator-arrow-depth=<arg>

为成员访问调用的 'operator->' 的最大数量

-foperator-names, -fno-operator-names
-foptimization-record-file=<file>

指定包含优化备注的文件的输出名称。意味着 -fsave-optimization-record。在 Darwin 平台上,这不能与多个 -arch <arch> 选项一起使用。

-foptimization-record-passes=<regex>

仅在生成的优化记录中包含与指定正则表达式匹配的传递(默认情况下,包含所有传递)

-foptimize-sibling-calls, -fno-optimize-sibling-calls
-forder-file-instrumentation

生成经过插桩的代码以将排序文件收集到 default.profraw 文件中(被选项的 ' =' 形式或 LLVM_PROFILE_FILE 环境变量覆盖)

-foutput-class-dir=<arg>, --output-class-directory <arg>, --output-class-directory=<arg>
-fpack-struct, -fno-pack-struct
-fpack-struct=<arg>

指定默认最大结构体打包对齐方式

-fpascal-strings, -fno-pascal-strings, -mpascal-strings

识别和构造 Pascal 风格的字符串文字

-fpass-plugin=<dsopath>

从动态共享对象文件加载传递插件(仅在使用新的传递管理器时)。

-fpatchable-function-entry=<N,M>

在函数入口之前生成 M 个 NOP,在函数入口之后生成 N-M 个 NOP

-fpcc-struct-return

覆盖默认 ABI 以在堆栈上返回所有结构

-fpch-codegen, -fno-pch-codegen

为使用此 PCH 的情况生成代码,假设将为 PCH 生成显式目标文件。

-fpch-debuginfo, -fno-pch-debuginfo

为从此 PCH 生成的目标文件中的类型生成调试信息,并且不要在其他地方生成它们。

-fpch-instantiate-templates, -fno-pch-instantiate-templates

在构建 PCH 的同时实例化模板。

-fpch-preprocess
-fpch-validate-input-files-content

如果 mtime 不同,则根据内容验证 PCH 输入文件。

-fpic, -fno-pic
-fpie, -fno-pie
-fplt, -fno-plt
-fplugin=<dsopath>

加载指定的插件(动态共享对象)。

-fpointer-tbaa, -fno-pointer-tbaa
-fprebuilt-implicit-modules, -fno-prebuilt-implicit-modules

在预构建的模块路径中查找隐式模块。

-fpreserve-as-comments, -fno-preserve-as-comments
-fproc-stat-report<arg>

打印子进程统计信息。

-fproc-stat-report=<arg>

将子进程统计信息保存到给定的文件。

-fprofile-arcs, -fno-profile-arcs

对代码进行插桩以生成 gcov 数据文件(*.gcda)。

-fprofile-dir=<arg>
-fprofile-exclude-files=<arg>

仅对来自文件中的函数进行插桩,这些文件中的名称与由分号分隔的所有正则表达式不匹配。

-fprofile-filter-files=<arg>

仅对来自文件中的函数进行插桩,这些文件中的名称与由分号分隔的任何正则表达式匹配。

-fprofile-function-groups=<N>

将函数划分为 N 个组,并使用 -fprofile-selected-function-group 仅选择组 i 中的函数进行插桩。

-fprofile-generate, -fno-profile-generate

生成插桩代码以将执行计数收集到 default.profraw 中(由 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-generate-cold-function-coverage

生成插桩代码以将冷函数的覆盖信息收集到 default.profraw 文件中(由选项的‘=’形式或 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-generate-cold-function-coverage=<directory>

生成插桩代码以将冷函数的覆盖信息收集到 <directory>/default.profraw 中(由 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-generate=<directory>

生成插桩代码以将执行计数收集到 <directory>/default.profraw 中(由 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-instr-generate, -fno-profile-instr-generate

生成插桩代码以将执行计数收集到 default.profraw 文件中(由选项的‘=’形式或 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-instr-generate=<file>

生成插桩代码以将执行计数收集到 <file> 中(由 LLVM_PROFILE_FILE 环境变量覆盖)。

-fprofile-instr-use, -fno-profile-instr-use, -fprofile-use
-fprofile-instr-use=<arg>

使用插桩数据进行 profile-guided optimization。

-fprofile-list=<arg>

定义要插桩的函数/文件的列表的文件名。该文件使用 sanitiser 特殊情况列表格式。

-fprofile-remapping-file=<file>

使用 <file> 中描述的重新映射以将配置文件数据与程序中的名称匹配。

-fprofile-sample-accurate, -fauto-profile-accurate, -fno-profile-sample-accurate
指定样本配置文件是准确的。如果样本

配置文件是准确的,则没有样本配置文件的调用点将被标记为冷的。否则,将没有样本配置文件的调用点视为没有配置文件。

-fprofile-sample-use, -fauto-profile, -fno-profile-sample-use
-fprofile-sample-use=<arg>, -fauto-profile=<arg>

启用基于样本的 profile-guided optimization。

-fprofile-selected-function-group=<i>

使用 -fprofile-function-groups 将函数划分为 N 个组,并仅选择组 i 中的函数进行插桩。有效范围是 0 到 N-1(含)。

-fprofile-update=<method>

设置配置文件计数器的更新方法。<method> 必须是 ‘atomic’、‘prefer-atomic’ 或 ‘single’。

-fprofile-use=<pathname>

使用插桩数据进行 profile-guided optimization。如果 pathname 是一个目录,则从 <pathname>/default.profdata 读取。否则,从文件 <pathname> 读取。

-fprotect-parens, -fno-protect-parens

确定优化器在求值浮点表达式时是否遵循括号。

-fpseudo-probe-for-profiling, -fno-pseudo-probe-for-profiling

为样本分析生成伪探针。

-fptrauth-auth-traps, -fno-ptrauth-auth-traps

在身份验证失败时启用陷阱

-fptrauth-calls, -fno-ptrauth-calls

启用所有间接调用的签名和身份验证

-fptrauth-function-pointer-type-discrimination, -fno-ptrauth-function-pointer-type-discrimination

启用C函数指针的类型区分

-fptrauth-indirect-gotos, -fno-ptrauth-indirect-gotos

启用间接goto目标的签名和身份验证

-fptrauth-init-fini, -fno-ptrauth-init-fini

启用init/fini数组中函数指针的签名

-fptrauth-init-fini-address-discrimination, -fno-ptrauth-init-fini-address-discrimination

启用init/fini数组中函数指针的地址区分

-fptrauth-intrinsics, -fno-ptrauth-intrinsics

启用指针认证内联函数

-fptrauth-returns, -fno-ptrauth-returns

启用返回地址的签名和身份验证

-fptrauth-type-info-vtable-pointer-discrimination, -fno-ptrauth-type-info-vtable-pointer-discrimination

启用std::type_info的vtable指针的类型和地址区分

-fptrauth-vtable-pointer-address-discrimination, -fno-ptrauth-vtable-pointer-address-discrimination

启用vtable指针的地址区分

-fptrauth-vtable-pointer-type-discrimination, -fno-ptrauth-vtable-pointer-type-discrimination

启用vtable指针的类型区分

-fraw-string-literals, -fno-raw-string-literals

启用原始字符串字面量

-freciprocal-math, -fno-reciprocal-math

允许重新关联除法运算

-frecord-command-line, -fno-record-command-line, -frecord-gcc-switches

生成一个名为“.GCC.command.line”的节,其中包含驱动程序命令行。链接后,该节可能包含多个命令行,这些命令行将由空字节单独终止。命令行内单独的参数用空格组合;参数内的空格和反斜杠用反斜杠转义。此格式不同于 GCC 使用 -frecord-gcc-switches 标志生成的等效节的格式。此选项目前仅在 ELF 目标上受支持。

-freg-struct-return

覆盖默认 ABI,以便在寄存器中返回小型结构

-fregister-global-dtors-with-atexit, -fno-register-global-dtors-with-atexit

使用 atexit 或 __cxa_atexit 注册全局析构函数

-frelaxed-template-template-args, -fno-relaxed-template-template-args

启用 C++17 放宽的模板模板参数匹配

-fretain-comments-from-system-headers
-frewrite-imports, -fno-rewrite-imports
-frewrite-includes, -fno-rewrite-includes
-fropi, -fno-ropi

生成只读位置无关代码(仅限 ARM)

-frounding-math, -fno-rounding-math
-frtlib-defaultlib, -fno-rtlib-defaultlib

在 Windows 上,发出 /defaultlib: 指令以链接编译器 rt 库(默认)

-frtti, -fno-rtti
-frtti-data, -fno-rtti-data
-frwpi, -fno-rwpi

生成读写位置无关代码(仅限 ARM)

-fsafe-buffer-usage-suggestions, -fno-safe-buffer-usage-suggestions

显示更新与 -Wunsafe-buffer-usage 警告相关的代码的建议

-fsample-profile-use-profi
推断块和边计数。如果配置文件由于采样而存在错误或缺少

块,配置文件推断(profi)可以通过扩展和重新设计的经典 MCMF(最小成本最大流)方法将基本块计数转换为分支概率来修复它们。

-fsanitize-memory-param-retval, -fno-sanitize-memory-param-retval

启用检测未初始化的参数和返回值

-fsanitize-stable-abi, -fno-sanitize-stable-abi

用于消毒运行时的稳定 ABI 检测。默认:传统

-fsave-optimization-record, -fno-save-optimization-record

生成 YAML 优化记录文件

-fsave-optimization-record=<format>

以特定格式生成优化记录文件

-fseh-exceptions

使用 SEH 样式异常

-fsemantic-interposition, -fno-semantic-interposition

启用语义插桩。语义插桩允许在运行时通过另一个符号插桩符号,从而防止一系列跨过程优化。

-fseparate-named-sections, -fno-separate-named-sections

为命名节使用单独的唯一节(仅限 ELF)

-fshort-enums, -fno-short-enums

仅为枚举类型分配其为声明的可能值范围所需的字节数

-fshort-wchar, -fno-short-wchar

强制 wchar_t 为 short unsigned int

-fshow-column, -fno-show-column
-fshow-overloads=<arg>

在重载解析失败时显示哪些重载候选者。默认为‘all’。<arg> 必须为‘best’ 或 ‘all’。

-fshow-source-location, -fno-show-source-location
-fsignaling-math, -fno-signaling-math
-fsigned-bitfields
-fsigned-char, -fno-signed-char, --signed-char

char 有符号

-fsigned-zeros, -fno-signed-zeros
-fsized-deallocation, -fno-sized-deallocation

启用 C++14 调整大小的全局释放函数

-fsjlj-exceptions

使用 SjLj 样式异常

-fskip-odr-check-in-gmf, -fno-skip-odr-check-in-gmf

跳过全局模块片段中 decls 的 ODR 检查。

-fslp-vectorize, -fno-slp-vectorize, -ftree-slp-vectorize

启用超级字级并行矢量化过程

-fspell-checking, -fno-spell-checking
-fspell-checking-limit=<arg>

设置对无法识别的标识符执行拼写检查的最大次数(0 = 无限制)

-fsplit-dwarf-inlining, -fno-split-dwarf-inlining

在使用 Split DWARF 时,在对象/可执行文件中提供最少的调试信息以促进在线符号化/堆栈跟踪,前提是缺少 .dwo/.dwp 文件

-fsplit-lto-unit, -fno-split-lto-unit

启用 LTO 单位拆分

-fsplit-machine-functions, -fno-split-machine-functions

使用配置文件信息启用后期函数拆分(x86 ELF)

-fsplit-stack, -fno-split-stack

使用分段堆栈

-fstack-clash-protection, -fno-stack-clash-protection

对堆栈分配进行检测以防止堆栈冲突攻击

-fstack-protector, -fno-stack-protector

为某些容易受到堆栈粉碎攻击的函数启用堆栈保护程序。这使用一个松散的启发式方法,如果函数包含 char(或 8 位整数)数组或对 alloca 的常量大小调用,这些数组或调用的大小大于 ssp-buffer-size(默认值:8 字节),则认为这些函数容易受到攻击。对 alloca 的所有可变大小调用都被认为是容易受到攻击的。具有堆栈保护程序的函数会在堆栈帧中添加一个保护值,该值会在函数退出时进行检查。保护值必须放置在堆栈帧中,以便来自易受攻击变量的缓冲区溢出会在覆盖函数的返回地址之前覆盖保护值。参考堆栈保护值存储在全局变量中。

-fstack-protector-all

为所有函数启用堆栈保护程序

-fstack-protector-strong

为某些容易受到堆栈粉碎攻击的函数启用堆栈保护程序。与 -fstack-protector 相比,它使用更强的启发式方法,包括包含任何大小(以及任何类型)的数组的函数,以及对 alloca 的任何调用或从局部变量获取地址。

-fstack-size-section, -fno-stack-size-section

发出包含有关函数堆栈大小的元数据的节

-fstack-usage

发出包含有关函数堆栈大小的信息的 .su 文件

-fstandalone-debug, -fno-limit-debug-info, -fno-standalone-debug

为程序使用的所有类型发出完整的调试信息

-fstrict-aliasing, -fno-strict-aliasing

启用基于严格别名规则的优化

-fstrict-enums, -fno-strict-enums

启用基于枚举值范围严格定义的优化

-fstrict-flex-arrays=<n>

启用基于灵活数组的严格定义的优化。<n> 必须为 '0'、'1'、'2' 或 '3'。

-fstrict-float-cast-overflow, -fno-strict-float-cast-overflow

假设浮点数到整数的转换溢出是未定义的行为(默认)

-fstrict-overflow, -fno-strict-overflow
-fstrict-return, -fno-strict-return
-fstrict-vtable-pointers, -fno-strict-vtable-pointers

启用基于覆盖多态 C++ 对象的严格规则的优化

-fstruct-path-tbaa, -fno-struct-path-tbaa
-fswift-async-fp=<option>

控制 Swift 异步扩展帧信息的生成。<option> 必须为 'auto'、'always' 或 'never'。

-fsymbol-partition=<arg>
-ftabstop=<arg>
-ftemplate-backtrace-limit=<arg>

设置模板实例化回溯中打印的条目最大数量(0 = 无限制)

-ftemplate-depth=<arg>, -ftemplate-depth-<arg>

设置递归模板实例化的最大深度

-ftest-coverage, -fno-test-coverage

生成 gcov 注释文件 (*.gcno)

仅为 ThinLTO 细链接将最小化的位代码写入 <file>

-fthinlto-index=<arg>

使用提供的函数摘要索引执行 ThinLTO 导入

-fthreadsafe-statics, -fno-threadsafe-statics
-ftime-report
-ftime-report=<arg>

(对于新的传递管理器)'per-pass':每个传递一个报告;'per-pass-run':每次传递调用一个报告。<arg> 必须为 'per-pass' 或 'per-pass-run'。

-ftime-trace

开启时间分析器。生成基于输出文件名的 JSON 文件。结果可以使用 chrome://tracing 或 Speedscope App 进行火焰图可视化分析。

-ftime-trace-granularity=<arg>

时间分析器跟踪的最小时间粒度(以微秒为单位)

-ftime-trace-verbose<arg>

使时间跟踪捕获详细的事件信息(例如源文件名)。这可能会使输出大小增加 2-3 倍

-ftime-trace=<arg>

类似于 -ftime-trace。指定 JSON 文件或包含 JSON 文件的目录

-ftls-model=<arg>

<arg> 必须为 'global-dynamic'、'local-dynamic'、'initial-exec' 或 'local-exec'。

-ftrap-function=<arg>

调用指定函数而不是陷阱指令

-ftrapping-math, -fno-trapping-math
-ftrapv

整数溢出时触发陷阱

-ftrapv-handler <arg>
-ftrapv-handler=<function name>

指定溢出时要调用的函数

-ftrigraphs, -fno-trigraphs, -trigraphs, --trigraphs

处理三字母序列

-ftrivial-auto-var-init-max-size=<arg>

如果变量大小超过指定的实例数量(以字节为单位),则停止初始化平凡的自动堆栈变量

-ftrivial-auto-var-init-stop-after=<arg>

在指定的实例数量后停止初始化平凡的自动堆栈变量

-ftrivial-auto-var-init=<arg>

初始化平凡的自动堆栈变量。默认为 'uninitialized'。<arg> 必须为 'uninitialized'、'zero' 或 'pattern'。

-funified-lto, -fno-unified-lto

使用统一 LTO 管道

-funique-basic-block-section-names, -fno-unique-basic-block-section-names

使用基本块部分的唯一名称(仅限 ELF)

-funique-internal-linkage-names, -fno-unique-internal-linkage-names

通过追加模块路径的 MD5 哈希值来使内部链接符号名称唯一化

-funique-section-names, -fno-unique-section-names
-funroll-loops, -fno-unroll-loops

开启循环展开器

-funsafe-math-optimizations, -fno-unsafe-math-optimizations

允许可能降低精度的非安全浮点数学优化

-funsigned-bitfields
-funsigned-char, -fno-unsigned-char, --unsigned-char
-funwind-tables, -fno-unwind-tables
-fuse-cxa-atexit, -fno-use-cxa-atexit
-fuse-init-array, -fno-use-init-array
-fuse-ld=<arg>
-fuse-line-directives, -fno-use-line-directives

在预处理输出中使用 #line

-fvalidate-ast-input-files-content

计算并存储用于构建 AST 的输入文件的哈希值。如果内容相同,则认为具有不匹配 mtime 的文件有效

-fveclib=<arg>

使用给定的向量函数库。注意:-fveclib={ArmPL,SLEEF} 意味着 -fno-math-errno。<arg> 必须是 ‘Accelerate’, ‘libmvec’, ‘MASSV’, ‘SVML’, ‘SLEEF’, ‘Darwin_libsystem_m’, ‘ArmPL’, ‘AMDLIBM’ 或 ‘none’。

-fvectorize, -fno-vectorize, -ftree-vectorize

启用循环向量化过程

-fverbose-asm, -dA, -fno-verbose-asm

生成详细的汇编输出

-fvirtual-function-elimination, -fno-virtual-function-elimination

启用死虚函数消除优化。需要 -flto=full

-fvisibility-dllexport=<arg>

dllexport 定义的可见性。如果指定 Keep,则不会调整可见性 [-fvisibility-from-dllstorageclass]。<arg> 必须是 ‘keep’, ‘hidden’, ‘protected’ 或 ‘default’。

-fvisibility-externs-dllimport=<arg>

dllimport 外部声明的可见性。如果指定 Keep,则不会调整可见性 [-fvisibility-from-dllstorageclass]。<arg> 必须是 ‘keep’, ‘hidden’, ‘protected’ 或 ‘default’。

-fvisibility-externs-nodllstorageclass=<arg>

没有显式 DLL 存储类的外部声明的可见性。如果指定 Keep,则不会调整可见性 [-fvisibility-from-dllstorageclass]。<arg> 必须是 ‘keep’, ‘hidden’, ‘protected’ 或 ‘default’。

-fvisibility-from-dllstorageclass, -fno-visibility-from-dllstorageclass

根据全局变量的最终 DLL 存储类覆盖全局变量的可见性。

-fvisibility-global-new-delete-hidden

为全局 C++ 运算符 new 和 delete 声明提供隐藏的可见性

-fvisibility-global-new-delete=<arg>

全局 C++ 运算符 new 和 delete 声明的可见性。如果指定 ‘source’,则不会调整可见性。<arg> 必须是 ‘force-default’, ‘force-protected’, ‘force-hidden’ 或 ‘source’。

-fvisibility-inlines-hidden, -fno-visibility-inlines-hidden

默认情况下,为内联 C++ 成员函数提供隐藏的可见性

-fvisibility-inlines-hidden-static-local-var, -fno-visibility-inlines-hidden-static-local-var

当启用 -fvisibility-inlines-hidden 时,内联 C++ 成员函数中的静态变量也会默认被赋予隐藏的可见性

-fvisibility-ms-compat

默认情况下,为全局类型提供 ‘default’ 可见性,为全局函数和变量提供 ‘hidden’ 可见性

-fvisibility-nodllstorageclass=<arg>

没有显式 DLL 存储类的定义的可见性。如果指定 Keep,则不会调整可见性 [-fvisibility-from-dllstorageclass]。<arg> 必须是 ‘keep’, ‘hidden’, ‘protected’ 或 ‘default’。

-fvisibility=<arg>

为所有全局定义设置默认符号可见性。<arg> 必须是 ‘default’, ‘hidden’, ‘internal’ 或 ‘protected’。

-fwasm-exceptions

使用 WebAssembly 样式异常

-fwhole-program-vtables, -fno-whole-program-vtables

启用全程序 vtable 优化。需要 -flto

-fwrapv, -fno-wrapv

将有符号整数溢出视为二进制补码

-fwritable-strings

将字符串字面量存储为可写数据

-fxl-pragma-pack, -fno-xl-pragma-pack

启用 IBM XL #pragma pack 处理

-fxray-always-emit-customevents, -fno-xray-always-emit-customevents

即使包含函数并非总是被检测,也始终发出 __xray_customevent(…) 调用

-fxray-always-emit-typedevents, -fno-xray-always-emit-typedevents

即使包含函数并非总是被检测,也始终发出 __xray_typedevent(…) 调用

-fxray-always-instrument=<arg>

已弃用:定义白名单的的文件名,用于赋予 ‘always instrument’ XRay 属性。

-fxray-attr-list=<arg>

定义用于赋予 XRay 属性的函数/类型的列表的文件名。

-fxray-function-groups=<arg>

只检测 N 个组中的 1 个

-fxray-function-index, -fno-xray-function-index
-fxray-ignore-loops, -fno-xray-ignore-loops

除非循环函数也满足最小函数大小,否则不要对包含循环的函数进行插桩。

-fxray-instruction-threshold=<arg>

设置使用 XRay 进行插桩的最小函数大小。

-fxray-instrument, -fno-xray-instrument

在函数入口和出口处生成 XRay 插桩滑块。

-fxray-instrumentation-bundle=<arg>

选择要发出哪些 XRay 插桩点。选项:all、none、function-entry、function-exit、function、custom。默认值为‘all’。‘function’ 包括‘function-entry’ 和‘function-exit’。

当指定 -fxray-instrument 时,链接 XRay 运行时库(默认值)。

-fxray-modes=<arg>

默认情况下链接到 XRay 插桩二进制文件中的模式列表。

-fxray-never-instrument=<arg>

已弃用:定义用于赋予‘从不插桩’XRay 属性的白名单的文件名。

-fxray-selected-function-group=<arg>

当使用 -fxray-function-groups 时,选择要插桩的函数组。有效范围为 0 到 fxray-function-groups - 1

-fxray-shared, -fno-xray-shared

使用 XRay 启用共享库插桩。

-fzero-call-used-regs=<arg>

在函数返回时清除调用使用的寄存器(仅限 AArch64/x86)。<arg> 必须是‘skip’、‘used-gpr-arg’、‘used-gpr’、‘used-arg’、‘used’、‘all-gpr-arg’、‘all-gpr’、‘all-arg’ 或‘all’。

-fzero-initialized-in-bss, -fno-zero-initialized-in-bss
-fzos-extensions, -fno-zos-extensions

接受 z/OS 编译器支持的一些非标准结构。

-fzvector, -fno-zvector, -mzvector

启用 System z 向量语言扩展。

-pedantic, --pedantic, -no-pedantic, --no-pedantic

在语言扩展上发出警告。

-pedantic-errors, --pedantic-errors

常见的卸载选项

--amdgpu-arch-tool=<arg>

用于检测系统中 AMD GPU 架构的工具。

-cuid=<arg>

编译单元的 ID,对于相同的编译单元,它应该是相同的,但对于不同的编译单元,它应该是不同的。它用于将单源卸载语言 CUDA 和 HIP 的设备端静态变量外部化,以便主机代码可以访问同一个编译单元。

-fgpu-default-stream=<arg>

指定默认流。默认值为‘legacy’。(仅限 CUDA/HIP)。<arg> 必须是‘legacy’ 或‘per-thread’。

-fgpu-defer-diag, -fno-gpu-defer-diag

延迟 CUDA/HIP 的主机/设备相关诊断消息。

-fgpu-flush-denormals-to-zero, -fcuda-flush-denormals-to-zero, -fno-gpu-flush-denormals-to-zero

在 CUDA/HIP 设备模式下将非规格化浮点值刷新为零。

-fgpu-rdc, -fcuda-rdc, -fno-gpu-rdc

生成可重定位的设备代码,也称为单独编译模式。

-fgpu-sanitize, -fno-gpu-sanitize

为支持的卸载设备启用消毒器。

-foffload-implicit-host-device-templates, -fno-offload-implicit-host-device-templates

没有主机、设备和全局属性的模板函数或特化具有隐式主机设备属性(仅限 CUDA/HIP)。

-foffload-via-llvm, -fno-offload-via-llvm

使用 LLVM/Offload 作为可移植卸载运行时。

-fuse-cuid=<arg>

为单源卸载语言 CUDA 和 HIP 生成编译单元 ID 的方法:‘hash’(通过哈希文件路径和命令行选项生成的 ID)|‘random’(生成的 ID 为随机数)|‘none’(禁用)。默认值为‘hash’。如果指定此选项,则将被选项‘-cuid=[ID]’ 覆盖。

--nvptx-arch-tool=<arg>

用于检测系统中 NVIDIA GPU 架构的工具。

--offload-arch=<arg>, --cuda-gpu-arch=<arg>, --no-offload-arch=<arg>

为 CUDA、HIP 或 OpenMP 指定卸载设备架构。(例如 sm_35)。如果使用‘native’,编译器将检测本地安装的架构。对于 HIP 卸载,设备架构后面可以跟着目标 ID 特性,这些特性用冒号分隔(例如 gfx908:xnack+:sramecc-)。可以多次指定。

--offload-compress, --no-offload-compress

压缩卸载设备二进制文件(仅限 HIP)

--offload-device-only, --cuda-device-only

仅针对卸载设备进行编译。

--offload-host-device, --cuda-compile-host-device

同时针对卸载主机和设备进行编译(默认)。

--offload-host-only, --cuda-host-only

仅针对卸载主机进行编译。

--offload-new-driver, --no-offload-new-driver

使用新的驱动程序进行卸载编译。

OpenCL 选项

-cl-denorms-are-zero

仅限 OpenCL。允许将非规格化数刷新为零。

-cl-ext=<arg1>,<arg2>...

仅限 OpenCL。启用或禁用 OpenCL 扩展/可选功能。参数是包含一个或多个扩展名称的用逗号分隔的序列,每个名称前缀为 ‘+’ 或 ‘-’。

-cl-fast-relaxed-math

仅限 OpenCL。设置 -cl-finite-math-only 和 -cl-unsafe-math-optimizations,并定义 __FAST_RELAXED_MATH__。

-cl-finite-math-only

仅限 OpenCL。允许对假定参数和结果不是 NaN 或 +-Inf 的浮点进行优化。

-cl-fp32-correctly-rounded-divide-sqrt

仅限 OpenCL。指定程序源代码中使用的单精度浮点除法和平方根是正确舍入的。

-cl-kernel-arg-info

仅限 OpenCL。生成内核参数元数据。

-cl-mad-enable

仅限 OpenCL。允许在生成的二进制文件中使用精度较低的 MAD 计算。

-cl-no-signed-zeros

仅限 OpenCL。允许在生成的二进制文件中使用精度较低的无符号零计算。

-cl-no-stdinc

仅限 OpenCL。禁用包含非原生编译器类型和函数的所有标准包含。

-cl-opt-disable

仅限 OpenCL。此选项禁用所有优化。默认情况下启用优化。

-cl-single-precision-constant

仅限 OpenCL。将双精度浮点常量视为单精度浮点常量。

-cl-std=<arg>

要编译的 OpenCL 语言标准。<arg> 必须是 ‘cl’、‘CL’、‘cl1.0’、‘CL1.0’、‘cl1.1’、‘CL1.1’、‘cl1.2’、‘CL1.2’、‘cl2.0’、‘CL2.0’、‘cl3.0’、‘CL3.0’、‘clc++’、‘CLC++’、‘clc++1.0’、‘CLC++1.0’、‘clc++2021’ 或 ‘CLC++2021’。

-cl-strict-aliasing

仅限 OpenCL。此选项是为与 OpenCL 1.0 保持兼容性而添加的。

-cl-unsafe-math-optimizations

仅限 OpenCL。允许不安全的浮点优化。还意味着 -cl-no-signed-zeros 和 -cl-mad-enable。

SYCL 选项

-fsycl, -fno-sycl

启用 SYCL 内核针对设备的编译

-sycl-std=<arg>

要编译的 SYCL 语言标准。<arg> 必须是 ‘2020’、‘2017’、‘121’、‘1.2.1’ 或 ‘sycl-1.2.1’。

CUDA 选项

--cuda-feature=<arg>

手动指定要使用的 CUDA 功能

--cuda-include-ptx=<arg>, --no-cuda-include-ptx=<arg>

包括以下 GPU 架构的 PTX(例如 sm_35)或 ‘all’。可以多次指定。

--cuda-noopt-device-debug, --no-cuda-noopt-device-debug

启用设备端调试信息生成。禁用 ptxas 优化。

--cuda-path-ignore-env

忽略环境变量以检测 CUDA 安装

--cuda-path=<arg>

CUDA 安装路径

-fcuda-short-ptr, -fno-cuda-short-ptr

使用 32 位指针访问 const/local/shared 地址空间

--no-cuda-version-check

如果检测到的 CUDA 安装版本低于请求的 CUDA gpu 架构,则不报错。

--ptxas-path=<arg>

ptxas 的路径(用于编译 CUDA 代码)

HIP 选项

-fgpu-allow-device-init, -fno-gpu-allow-device-init

允许 HIP 中的设备端初始化函数(实验性)

-fhip-emit-relocatable, -fno-hip-emit-relocatable

将 HIP 源代码编译为可重定位的

-fhip-fp32-correctly-rounded-divide-sqrt, -fno-hip-fp32-correctly-rounded-divide-sqrt

指定程序源代码中使用的单精度浮点除法和平方根是正确舍入的(仅限 HIP 设备编译)

-fhip-kernel-arg-name, -fno-hip-kernel-arg-name

指定内核参数名称被保留(仅限 HIP)

-fhip-new-launch-api, -fno-hip-new-launch-api

对 HIP 使用新的内核启动 API

--gpu-bundle-output, --no-gpu-bundle-output

捆绑 HIP 设备编译的输出文件

--gpu-instrument-lib=<arg>

为 HIP 构建设备库,它是一个包含 __cyg_profile_func_enter 和 __cyg_profile_func_exit 的 LLVM 位代码

--gpu-max-threads-per-block=<arg>

HIP 内核启动边界默认最大线程数/块

--hip-device-lib=<arg>

HIP 设备库

链接 clang-offload-bundler 的 HIP 包

--hip-path=<arg>

HIP 运行时安装路径,用于查找 HIP 版本并添加 HIP 包含路径。

--hip-version=<arg>

HIP 版本,格式为 major.minor.patch

--hipspv-pass-plugin=<dsopath>

HIP 到 SPIR-V 传递的传递插件路径。

--hipstdpar

启用 HIP 对标准并行算法的加速

--hipstdpar-interpose-alloc

用 hipManagedMalloc / hipFree 等效项替换所有内存分配/释放调用

--hipstdpar-path=<arg>

HIP 标准并行算法加速库路径,用于查找并隐式包含库头文件

--hipstdpar-prim-path=<arg>

rocPrim 路径,HIP 标准并行算法加速库需要,用于隐式包含 rocPrim 库

--hipstdpar-thrust-path=<arg>

rocThrust 路径,HIP 标准并行算法加速库需要,用于隐式包含 rocThrust 库

-no-hip-rt

不要链接到 HIP 运行时库

--rocm-device-lib-path=<arg>, --hip-device-lib-path=<arg>

ROCm 设备库路径。作为 rocm-path 的替代方案。

--rocm-path=<arg>

ROCm 安装路径,用于查找并自动链接所需的位代码库。

HLSL 选项

-fhlsl-strict-availability

为 HLSL 内置函数启用严格可用性诊断模式。

目标相关编译选项

-G<size>, -G=<arg>, -msmall-data-limit=<arg>, -msmall-data-threshold=<arg>

将大小不超过 <size> 字节的对象放入小型数据段中(MIPS / Hexagon)

-ffixed-x1

保留 x1 寄存器(仅限 AArch64/RISC-V)

-ffixed-x10

保留 x10 寄存器(仅限 AArch64/RISC-V)

-ffixed-x11

保留 x11 寄存器(仅限 AArch64/RISC-V)

-ffixed-x12

保留 x12 寄存器(仅限 AArch64/RISC-V)

-ffixed-x13

保留 x13 寄存器(仅限 AArch64/RISC-V)

-ffixed-x14

保留 x14 寄存器(仅限 AArch64/RISC-V)

-ffixed-x15

保留 x15 寄存器(仅限 AArch64/RISC-V)

-ffixed-x16

保留 x16 寄存器(仅限 AArch64/RISC-V)

-ffixed-x17

保留 x17 寄存器(仅限 AArch64/RISC-V)

-ffixed-x18

保留 x18 寄存器(仅限 AArch64/RISC-V)

-ffixed-x19

保留 x19 寄存器(仅限 AArch64/RISC-V)

-ffixed-x2

保留 x2 寄存器(仅限 AArch64/RISC-V)

-ffixed-x20

保留 x20 寄存器(仅限 AArch64/RISC-V)

-ffixed-x21

保留 x21 寄存器(仅限 AArch64/RISC-V)

-ffixed-x22

保留 x22 寄存器(仅限 AArch64/RISC-V)

-ffixed-x23

保留 x23 寄存器(仅限 AArch64/RISC-V)

-ffixed-x24

保留 x24 寄存器(仅限 AArch64/RISC-V)

-ffixed-x25

保留 x25 寄存器(仅限 AArch64/RISC-V)

-ffixed-x26

保留 x26 寄存器(仅限 AArch64/RISC-V)

-ffixed-x27

保留 x27 寄存器(仅限 AArch64/RISC-V)

-ffixed-x28

保留 x28 寄存器(仅限 AArch64/RISC-V)

-ffixed-x29

保留 x29 寄存器(仅限 AArch64/RISC-V)

-ffixed-x3

保留 x3 寄存器(仅限 AArch64/RISC-V)

-ffixed-x30

保留 x30 寄存器(仅限 AArch64/RISC-V)

-ffixed-x31

保留 x31 寄存器(仅限 AArch64/RISC-V)

-ffixed-x4

保留 x4 寄存器(仅限 AArch64/RISC-V)

-ffixed-x5

保留 x5 寄存器(仅限 AArch64/RISC-V)

-ffixed-x6

保留 x6 寄存器(仅限 AArch64/RISC-V)

-ffixed-x7

保留 x7 寄存器(仅限 AArch64/RISC-V)

-ffixed-x8

保留 x8 寄存器(仅限 AArch64/RISC-V)

-ffixed-x9

保留 x9 寄存器(仅限 AArch64/RISC-V)

-ffuchsia-api-level=<arg>

设置 Fuchsia API 级别

-inline-asm=<arg>

<arg> 必须为 ‘att’ 或 ‘intel’。

-m16
-m32
-m64
-mabi=<arg>
-mabi=quadword-atomics

在 AIX 上启用四字原子 ABI(仅限 AIX PPC64)。使用 lqarx/stqcx 指令。

-maix-struct-return

覆盖 32 位目标的默认 ABI,以在内存中返回所有结构体,如 Linux 的 Power 32 位 ABI(2011 年)以及 AIX 和 Darwin 上。

-maix32
-maix64
-malign-branch-boundary=<arg>

指定对齐分支的边界的尺寸

-malign-branch=<arg1>,<arg2>...

指定要对齐的分支类型

-malign-double

将双精度浮点数对齐到结构体中的两个字(仅限 x86)

-mamdgpu-ieee, -mno-amdgpu-ieee

在预期默认浮点模式寄存器中设置 IEEE 位。支持异常标志收集的浮点操作码会根据 IEEE 754-2008 标准对安静和传播信号 NaN 输入进行静默和传播。此选项会更改 ABI。(仅限 AMDGPU)

-mamdgpu-precise-memory-op, -mno-amdgpu-precise-memory-op

启用精确内存模式(仅限 AMDGPU)

-mapx-inline-asm-use-gpr32

启用在 APX 的内联汇编中使用 GPR32

-march=<arg>

要查看目标的可用体系结构列表,请使用“ -mcpu=help”。

-marm64x<arg>

链接为混合 ARM64X 映像

-masm=<arg>
-mbackchain, -mno-backchain

通过 System Z 上的反向链接链接堆栈帧

-mbig-endian, -EB
-mbranch-protection=<arg>

强制执行间接分支和函数返回值的目标

-mbranches-within-32B-boundaries

将选定的分支(融合的、jcc、jmp)对齐到 32 字节边界

-mcf-branch-label-scheme=<arg>

为分支控制流体系结构保护选择标签方案。<arg> 必须是“unlabeled”或“func-sig”。

-mcmodel=<arg>
-mcode-object-version=<arg>

指定代码对象 ABI 版本。默认为 5。(仅限 AMDGPU)。<arg> 必须是“none”、“4”、“5”或“6”。

-mconsole<arg>
-mconstructor-aliases, -mno-constructor-aliases

尽可能启用将完整的构造函数和析构函数作为别名发出

-mcpu=<arg>, -mv5 (equivalent to -mcpu=hexagonv5), -mv55 (equivalent to -mcpu=hexagonv55), -mv60 (equivalent to -mcpu=hexagonv60), -mv62 (equivalent to -mcpu=hexagonv62), -mv65 (equivalent to -mcpu=hexagonv65), -mv66 (equivalent to -mcpu=hexagonv66), -mv67 (equivalent to -mcpu=hexagonv67), -mv67t (equivalent to -mcpu=hexagonv67t), -mv68 (equivalent to -mcpu=hexagonv68), -mv69 (equivalent to -mcpu=hexagonv69), -mv71 (equivalent to -mcpu=hexagonv71), -mv71t (equivalent to -mcpu=hexagonv71t), -mv73 (equivalent to -mcpu=hexagonv73)

要查看目标的可用 CPU 列表,请使用“ -mcpu=help”。

-mcrc, -mno-crc

允许使用 CRC 指令(仅限 ARM/Mips)

-mdaz-ftz, -mno-daz-ftz

在程序启动时全局设置浮点控制寄存器中的 denormals-are-zero(DAZ)和 flush-to-zero(FTZ)位

-mdefault-build-attributes<arg>, -mno-default-build-attributes<arg>
-mdefault-visibility-export-mapping=<arg>

默认可见性和导出之间的映射。<arg> 必须是“none”、“explicit”或“all”。

-mdll<arg>
-mdouble-float
-mdouble=<n

强制双精度浮点数为 <n> 位。<n 必须是“32”或“64”。

-mdynamic-no-pic<arg>
-meabi <arg>

设置 EABI 类型。默认值取决于三元组)。<arg> 必须是“default”、“4”、“5”或“gnu”。

-menable-experimental-extensions

启用使用实验性 RISC-V 扩展。

-mfentry

在函数入口处插入对 fentry 的调用(仅限 x86/SystemZ)

-mfloat-abi=<arg>

<arg> 必须是“soft”、“softfp”或“hard”。

-mfpmath=<arg>
-mfpu=<arg>
-mfunction-return=<arg>

将返回替换为跳转到 ``__x86_return_thunk``(仅限 x86,否则为错误)。<arg> 必须为 ‘keep’ 或 ‘thunk-extern’。

-mgeneral-regs-only

生成仅使用通用寄存器的代码(仅限 AArch64/x86)

-mglobal-merge, -mno-global-merge

启用全局合并

-mguard=<arg>

启用或禁用控制流防护检查和防护表发射。<arg> 必须为 ‘none’、‘cf’ 或 ‘cf-nochecks’。

-mhard-float
-mharden-sls=<arg>

选择直线推测硬化范围(仅限 ARM/AArch64/X86)。<arg> 必须为:all、none、retbr(ARM/AArch64)、blr(ARM/AArch64)、comdat(ARM/AArch64)、nocomdat(ARM/AArch64)、return(X86)、indirect-jmp(X86)

-mhwdiv=<arg>, --mhwdiv <arg>, --mhwdiv=<arg>
-mhwmult=<arg>
-miamcu, -mno-iamcu

使用 Intel MCU ABI

-mignore-xcoff-visibility

不为 AIX 操作系统中的 asm 发射可见性属性,或在 XCOFF 对象文件中为所有符号提供 ‘unspecified’ 可见性

-mimplicit-float, -mno-implicit-float
-mimplicit-it=<arg>
-mincremental-linker-compatible, -mno-incremental-linker-compatible

(集成式汇编器) 发射一个可以使用增量链接器的目标文件

-mindirect-branch-cs-prefix

向调用和跳转到间接 thunk 添加 cs 前缀

-mios-simulator-version-min=<arg>, -miphonesimulator-version-min=<arg>
-mios-version-min=<arg>, -miphoneos-version-min=<arg>

设置 iOS 部署目标

-mkernel
-mlarge-data-threshold=<arg>

在优化管道之后链接内置位代码

-mlinker-version=<arg>
-mlittle-endian, -EL
-mlong-calls, -mno-long-calls

使用扩展寻址生成分支,通常通过间接跳转。

-mlvi-cfi, -mno-lvi-cfi

仅针对加载值注入 (LVI) 启用控制流缓解措施

-mlvi-hardening, -mno-lvi-hardening

启用针对加载值注入 (LVI) 的所有缓解措施

-mmacos-version-min=<arg>, -mmacosx-version-min=<arg>

设置 macOS 部署目标

-mmcu=<arg>
-mms-bitfields, -mno-ms-bitfields

将默认结构布局设置为与 Microsoft 编译器标准兼容

-mno-gather

在自动矢量化中禁用生成收集指令(仅限 x86)

-mno-scatter

在自动矢量化中禁用生成散布指令(仅限 x86)

-mnop-mcount

将 mcount/__fentry__ 调用生成为空操作。若要激活它们,需要在其中进行修补。

-momit-leaf-frame-pointer, -mno-omit-leaf-frame-pointer

省略叶函数的帧指针设置

-moslib=<arg>
-mpacked-stack, -mno-packed-stack

使用打包的堆栈布局(仅限 SystemZ)。

-mpad-max-prefix-size=<arg>

指定用于填充的前缀的最大数量

-mpic-data-is-text-relative, -mno-pic-data-is-text-relative

假设数据段相对于文本段

-mprefer-vector-width=<arg>

指定自动矢量化的首选向量宽度。默认为 ‘none’,这允许目标特定的决策。

-mprintf-kind=<arg>

指定 printf 降低方案(仅限 AMDGPU),允许的值为“hostcall”(打印发生在内核执行期间,此方案依赖于 hostcall,这些 hostcall 需要系统支持 pcie 原子操作)和“buffered”(打印发生在所有内核线程退出之后,这使用 printf 缓冲区,并且不依赖于 pcie 原子操作支持)。<arg> 必须为 ‘hostcall’ 或 ‘buffered’。

-mqdsp6-compat

启用 hexagon-qdsp6 向后兼容性

-mrecip

等效于 ‘-mrecip=all’

-mrecip=<arg1>,<arg2>...

控制使用近似倒数和倒数平方根指令,然后进行 <n> 次牛顿-拉夫森细化迭代。<value> = ( [‘!’] [‘vec-’] (‘rcp’|’sqrt’) [(‘h’|’s’|’d’)] [‘:’<n>] ) | ‘all’ | ‘default’ | ‘none’

-mrecord-mcount

为每个 __fentry__ 调用生成一个 __mcount_loc 节条目。

-mred-zone, -mno-red-zone
-mregnames, -mno-regnames

在编写汇编输出时使用完整的寄存器名称

-mregparm=<arg>
-mrelax, -mno-relax

启用链接器松弛

-mrelax-all, -mno-relax-all

(integrated-as) 松弛所有机器指令

-mretpoline, -mno-retpoline
-mrtd, -mno-rtd

使 StdCall 调用约定成为默认约定

-mrvv-vector-bits=<arg>

默认为“可扩展”的向量长度无关值。接受 64 到 65536 之间的 2 的幂值。还接受“zvl”来使用 -march/-mcpu 隐含的值。该值将反映在 __riscv_v_fixed_vlen 预处理器定义中(仅限 RISC-V)

-msave-reg-params

将通过寄存器传递的参数保存到 ABI 定义的堆栈位置

-mscalar-strict-align, -mno-scalar-strict-align

强制所有标量内存访问对齐(仅限 RISC-V)

-mseses, -mno-seses

启用推测执行副作用抑制 (SESES)。包括 LVI 控制流完整性缓解措施

-msign-return-address=<arg>

选择返回地址签名范围。<arg> 必须为“none”、“all”或“non-leaf”。

-msim
-msingle-float
-mskip-rax-setup, -mno-skip-rax-setup

在传递可变参数时跳过设置 RAX 寄存器(仅限 x86)

-msoft-float, -mno-soft-float

使用软件浮点运算

-mspeculative-load-hardening, -mno-speculative-load-hardening
-msse2avx

指定汇编器应使用 VEX 前缀对 SSE 指令进行编码

-mstack-alignment=<arg>

设置堆栈对齐

-mstack-arg-probe, -mno-stack-arg-probe

启用堆栈探测

-mstack-probe-size=<arg>

设置堆栈探测大小

-mstack-protector-guard-offset=<arg>

使用给定的偏移量来寻址堆栈保护器护卫

-mstack-protector-guard-reg=<arg>

使用给定的寄存器来寻址堆栈保护器护卫

-mstack-protector-guard-symbol=<arg>

使用给定的符号来寻址堆栈保护器护卫

-mstack-protector-guard=<arg>

使用给定的护卫(全局,tls)来寻址堆栈保护器护卫

-mstackrealign, -mno-stackrealign

强制在进入每个函数时重新对齐堆栈

-mstrict-align, -mno-strict-align

强制所有内存访问对齐(仅限 AArch64/LoongArch/RISC-V)

-msvr4-struct-return

覆盖 32 位目标的默认 ABI,以在寄存器中返回小结构,如 System V ABI(1995)中所做的那样。

-mtargetos=<arg>

将部署目标设置为指定的 OS 和 OS 版本

-mthread-model <arg>

要使用的线程模型。默认为“posix”。<arg> 必须为“posix”或“single”。

-mthreads<arg>
-mthumb, -mno-thumb
-mtls-dialect=<arg>

要用于 TLS 变量的动态访问的线程局部存储方言

-mtls-direct-seg-refs, -mno-tls-direct-seg-refs

启用通过段寄存器进行直接 TLS 访问(默认)

-mtls-size=<arg>

指定立即 TLS 偏移量的位大小(仅限 AArch64 ELF):12(对于 4KB)| 24(对于 16MB,默认)| 32(对于 4GB)| 48(对于 256TB,需要 -mcmodel=large)

-mtocdata, -mno-tocdata

所有合适的变量都将应用 TOC 数据转换

-mtocdata=<arg1>,<arg2>..., -mno-tocdata=<arg1>,<arg2>...

指定将应用 TOC 数据转换的变量列表。

-mtune=<arg>

仅在 AArch64、PowerPC、RISC-V、SPARC、SystemZ 和 X86 上受支持

-mtvos-version-min=<arg>, -mappletvos-version-min=<arg>
-munaligned-access, -mno-unaligned-access

允许内存访问未对齐(仅限 AArch32/MIPSr6)

-munaligned-symbols, -mno-unaligned-symbols

预期外部字符对齐的符号没有 ABI 对齐(仅限 SystemZ)

-municode<arg>
-munsafe-fp-atomics, -mno-unsafe-fp-atomics

启用生成不安全的浮点原子指令。可能会生成更高效的代码,但可能不尊重舍入和非规格化模式,并且可能对某些内存目标产生错误的结果。(仅限 AMDGPU)

-mvector-strict-align, -mno-vector-strict-align

强制所有向量内存访问对齐(仅限 RISC-V)

-mvx, -mno-vx
-mwarn-nonportable-cfstrings, -mno-warn-nonportable-cfstrings
-mwatchos-simulator-version-min=<arg>, -mwatchsimulator-version-min=<arg>
-mwatchos-version-min=<arg>
-mwavefrontsize64, -mno-wavefrontsize64

指定波前大小 64 模式(仅限 AMDGPU)

-mwindows<arg>
-mx32
-mxcoff-roptr, -mno-xcoff-roptr

将具有可重定位地址值的常量对象放置在 RO 数据段中,并将 -bforceimprw 添加到链接器标志中(仅限 AIX)

-regcall4

将 __regcall4 设置为默认调用约定,以遵守 __regcall ABI v.4

--wasm-opt, --no-wasm-opt

启用 wasm-opt 优化器(默认)

AARCH64

-fcall-saved-x10

使 x10 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x11

使 x11 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x12

使 x12 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x13

使 x13 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x14

使 x14 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x15

使 x15 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x18

使 x18 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x8

使 x8 寄存器成为调用保存寄存器(仅限 AArch64)

-fcall-saved-x9

使 x9 寄存器成为调用保存寄存器(仅限 AArch64)

-mfix-cortex-a53-835769, -mno-fix-cortex-a53-835769

解决 Cortex-A53 勘误 835769(仅限 AArch64)

-mlr-for-calls-only

不要为通用用途分配 LR 寄存器,只为调用分配(仅限 AArch64)

-mmark-bti-property

将 .note.gnu.property 与 BTI 添加到汇编文件(仅限 AArch64)

-msve-vector-bits=<arg>

指定 SVE 向量寄存器的位大小。默认为与向量长度无关的“可扩展”值。(仅限 AArch64)

AMDGPU

-mcumode, -mno-cumode

指定 CU 波前执行模式(仅限 AMDGPU)

-mtgsplit, -mno-tgsplit

启用线程组拆分执行模式(仅限 AMDGPU)

ARM

-faapcs-bitfield-load

遵循 AAPCS 标准,所有易失性位字段写入至少生成一次加载。(仅限 ARM)。

-faapcs-bitfield-width, -fno-aapcs-bitfield-width

遵循 AAPCS 标准要求,即易失性位字段宽度由字段容器类型决定。(仅限 ARM)。

-ffixed-r9

保留 r9 寄存器(仅限 ARM)

-mcmse

允许使用 CMSE(Armv8-M 安全扩展)

-mexecute-only, -mno-execute-only, -mpure-code

禁止生成对代码段的数据访问(仅限 ARM)

-mfix-cmse-cve-2021-35465, -mno-fix-cmse-cve-2021-35465

解决 VLLDM 勘误 CVE-2021-35465(仅限 ARM)

-mfix-cortex-a57-aes-1742098, -mfix-cortex-a72-aes-1655431, -mno-fix-cortex-a57-aes-1742098

解决 Cortex-A57 勘误 1742098(仅限 ARM)

-mframe-chain=<arg>

选择用于发出帧记录的帧链模型(仅限 Arm)。<arg> 必须是 ‘none’,‘aapcs’ 或 ‘aapcs+leaf’。

-mno-bti-at-return-twice

在 setjmp 或其他返回两次结构之后不添加 BTI 指令(仅限 Arm/AArch64)

-mno-movt

禁止使用 movt/movw 对(仅限 ARM)

-mno-neg-immediates

禁止将具有负立即数的指令转换为其否定或反转。

-mnocrc

禁止使用 CRC 指令(仅限 ARM)

-mrestrict-it, -mno-restrict-it

禁止生成复杂的 IT 块。默认情况下它是关闭的。

-mtp=<arg>

线程指针访问方法。对于 AArch32:‘soft’ 使用函数调用,或者 ‘tpidrurw’、‘tpidruro’ 或 ‘tpidrprw’ 使用三个 CP15 寄存器。‘cp15’ 是 ‘tpidruro’ 的别名。对于 AArch64:‘tpidr_el0’、‘tpidr_el1’、‘tpidr_el2’、‘tpidr_el3’ 或 ‘tpidrro_el0’ 使用五个系统寄存器。‘elN’ 是 ‘tpidr_elN’ 的别名。<arg> 必须是 ‘soft’、‘cp15’、‘tpidrurw’、‘tpidruro’、‘tpidrprw’、‘el0’、‘el1’、‘el2’、‘el3’、‘tpidr_el0’、‘tpidr_el1’、‘tpidr_el2’、‘tpidr_el3’ 或 ‘tpidrro_el0’。

Hexagon

-mcabac

启用 CABAC 指令

-mhvx-ieee-fp, -mno-hvx-ieee-fp

启用 Hexagon HVX IEEE 浮点数

-mieee-rnd-near
-mmemops, -mno-memops

启用生成 memop 指令

-mnvj, -mno-nvj

启用生成新值跳转

-mnvs, -mno-nvs

启用生成新值存储

-mpackets, -mno-packets

启用生成指令包

SPARC

-ffixed-g1

保留 G1 寄存器(仅限 SPARC)

-ffixed-g2

保留 G2 寄存器(仅限 SPARC)

-ffixed-g3

保留 G3 寄存器(仅限 SPARC)

-ffixed-g4

保留 G4 寄存器(仅限 SPARC)

-ffixed-g5

保留 G5 寄存器(仅限 SPARC)

-ffixed-g6

保留 G6 寄存器(仅限 SPARC)

-ffixed-g7

保留 G7 寄存器(仅限 SPARC)

-ffixed-i0

保留 I0 寄存器(仅限 SPARC)

-ffixed-i1

保留 I1 寄存器(仅限 SPARC)

-ffixed-i2

保留 I2 寄存器(仅限 SPARC)

-ffixed-i3

保留 I3 寄存器(仅限 SPARC)

-ffixed-i4

保留 I4 寄存器(仅限 SPARC)

-ffixed-i5

保留 I5 寄存器(仅限 SPARC)

-ffixed-l0

保留 L0 寄存器(仅限 SPARC)

-ffixed-l1

保留 L1 寄存器(仅限 SPARC)

-ffixed-l2

保留 L2 寄存器(仅限 SPARC)

-ffixed-l3

保留 L3 寄存器(仅限 SPARC)

-ffixed-l4

保留 L4 寄存器(仅限 SPARC)

-ffixed-l5

保留 L5 寄存器(仅限 SPARC)

-ffixed-l6

保留 L6 寄存器(仅限 SPARC)

-ffixed-l7

保留 L7 寄存器(仅限 SPARC)

-ffixed-o0

保留 O0 寄存器(仅限 SPARC)

-ffixed-o1

保留 O1 寄存器(仅限 SPARC)

-ffixed-o2

保留 O2 寄存器(仅限 SPARC)

-ffixed-o3

保留 O3 寄存器(仅限 SPARC)

-ffixed-o4

保留 O4 寄存器(仅限 SPARC)

-ffixed-o5

保留 O5 寄存器(仅限 SPARC)

-mfix-gr712rc

启用针对 GR712RC 勘误的解决方法

-mfix-ut700

启用针对 UT700 勘误的解决方法

-mfpu, -mno-fpu
-mfsmuld, -mno-fsmuld
-mhard-quad-float
-mpopc, -mno-popc
-msoft-quad-float
-mv8plus, -mno-v8plus

启用 V8+ 模式,允许在 32 位代码中使用 64 位 V9 指令

-mvis, -mno-vis
-mvis2, -mno-vis2
-mvis3, -mno-vis3

Hexagon

-mhvx, -mno-hvx

启用 Hexagon 扩展矢量指令

-mhvx-length=<arg>

设置 Hexagon 矢量长度。<arg> 必须为 ‘64B’ 或 ‘128B’。

-mhvx-qfloat, -mno-hvx-qfloat

启用 Hexagon HVX QFloat 指令

-mhvx=<arg>

启用 Hexagon 扩展矢量指令

M68k

-ffixed-a0

保留 a0 寄存器(仅限 M68k)

-ffixed-a1

保留 a1 寄存器(仅限 M68k)

-ffixed-a2

保留 a2 寄存器(仅限 M68k)

-ffixed-a3

保留 a3 寄存器(仅限 M68k)

-ffixed-a4

保留 a4 寄存器(仅限 M68k)

-ffixed-a5

保留 a5 寄存器(仅限 M68k)

-ffixed-a6

保留 a6 寄存器(仅限 M68k)

-ffixed-d0

保留 d0 寄存器(仅限 M68k)

-ffixed-d1

保留 d1 寄存器(仅限 M68k)

-ffixed-d2

保留 d2 寄存器(仅限 M68k)

-ffixed-d3

保留 d3 寄存器(仅限 M68k)

-ffixed-d4

保留 d4 寄存器(仅限 M68k)

-ffixed-d5

保留 d5 寄存器(仅限 M68k)

-ffixed-d6

保留 d6 寄存器(仅限 M68k)

-ffixed-d7

保留 d7 寄存器(仅限 M68k)

-m68000
-m68010
-m68020
-m68030
-m68040
-m68060
-m68881

MIPS

-mabicalls, -mno-abicalls

启用 SVR4 风格的地址无关代码(仅限 Mips)

-mabs=<arg>
-mcheck-zero-division, -mno-check-zero-division
-mcompact-branches=<arg>
-mdsp, -mno-dsp
-mdspr2, -mno-dspr2
-membedded-data, -mno-embedded-data

即使常量满足 -G <size> 阈值,也将常量放置在 .rodata 部分而不是 .sdata 部分(MIPS)

-mextern-sdata, -mno-extern-sdata

假设外部定义的数据在满足 -G <size> 阈值的情况下位于小数据中(MIPS)

-mfix4300
-mfp32

使用 32 位浮点寄存器(仅限 MIPS)

-mfp64

使用 64 位浮点寄存器(仅限 MIPS)

-mginv, -mno-ginv
-mgpopt, -mno-gpopt

对已知位于小数据部分的符号使用 GP 相对访问(MIPS)

-mindirect-jump=<arg>

更改间接跳转指令以抑制推测

-mips16
-mldc1-sdc1, -mno-ldc1-sdc1
-mlocal-sdata, -mno-local-sdata

将 -G 行为扩展到对象局部数据(MIPS)

-mmadd4, -mno-madd4

启用生成 4 操作数 madd.s、madd.d 和相关指令。

-mmicromips, -mno-micromips
-mmsa, -mno-msa

启用 MSA ASE(仅 MIPS)

-mmt, -mno-mt

启用 MT ASE(仅 MIPS)

-mnan=<arg>
-mno-mips16
-mvirt, -mno-virt
-mxgot, -mno-xgot

PowerPC

-maix-shared-lib-tls-model-opt

对于与主程序一起加载的共享库,在函数级别将本地动态访问更改为初始执行访问(仅限 AIX 64 位)。

-maix-small-local-dynamic-tls

为本地动态 TLS 变量生成更快的访问序列,其中从 TLS 基址的偏移量被编码为立即操作数(仅限 AIX 64 位)。此访问序列不适用于大于 32KB 的变量。

-maix-small-local-exec-tls

为本地执行 TLS 变量生成更快的访问序列,其中从 TLS 基址的偏移量被编码为立即操作数(仅限 AIX 64 位)。此访问序列不适用于大于 32KB 的变量。

-maltivec, -mno-altivec

启用 AltiVec 矢量初始化器语法

-mcmpb, -mno-cmpb
-mcrbits, -mno-crbits

控制 PowerPC 上的 CR 位跟踪功能。``-mcrbits``(启用 CR 位跟踪支持)是 POWER8 及更高版本以及在应用优化(-O2 及更高版本)时所有其他 CPU 的默认值。

-mcrypto, -mno-crypto
-mdirect-move, -mno-direct-move
-mefpu2
-mfloat128, -mno-float128
-mfprnd, -mno-fprnd
-mhtm, -mno-htm
-minvariant-function-descriptors, -mno-invariant-function-descriptors
-misel, -mno-isel
-mlongcall, -mno-longcall
-mmfocrf, -mmfcrf, -mno-mfocrf
-mmma, -mno-mma
-mpaired-vector-memops, -mno-paired-vector-memops
-mpcrel, -mno-pcrel
-mpopcntd, -mno-popcntd
-mpower10-vector, -mno-power10-vector
-mpower8-vector, -mno-power8-vector
-mpower9-vector, -mno-power9-vector
-mprefixed, -mno-prefixed
-mprivileged
-mrop-protect
-msecure-plt
-mspe, -mno-spe
-mvsx, -mno-vsx

WebAssembly

-matomics, -mno-atomics
-mbulk-memory, -mno-bulk-memory
-mexception-handling, -mno-exception-handling
-mextended-const, -mno-extended-const
-mfp16, -mno-fp16
-mmultimemory, -mno-multimemory
-mmultivalue, -mno-multivalue
-mmutable-globals, -mno-mutable-globals
-mnontrapping-fptoint, -mno-nontrapping-fptoint
-mreference-types, -mno-reference-types
-mrelaxed-simd, -mno-relaxed-simd
-msign-ext, -mno-sign-ext
-msimd128, -mno-simd128
-mtail-call, -mno-tail-call
-mwide-arithmetic, -mno-wide-arithmetic

WebAssembly 驱动程序

-mexec-model=<arg>

在“命令”和“反应堆”可执行模型之间选择。命令具有一个主函数,该函数限定了程序的生命周期。反应堆被激活并保持活动状态,直到被明确终止。<arg> 必须是 'command' 或 'reactor'。

X86

-madx, -mno-adx
-maes, -mno-aes
-mamx-bf16, -mno-amx-bf16
-mamx-complex, -mno-amx-complex
-mamx-fp16, -mno-amx-fp16
-mamx-fp8, -mno-amx-fp8
-mamx-int8, -mno-amx-int8
-mamx-tile, -mno-amx-tile
-mamx-transpose, -mno-amx-transpose
-mapx-features=<arg1>,<arg2>..., -mapxf (等效于 -mapx-features=egpr,push2pop2,ppx,ndd,ccmp,nf,cf,zu), -mno-apx-features=<arg1>,<arg2>...

启用 APX 的功能。<arg> 必须是 'egpr'、'push2pop2'、'ppx'、'ndd'、'ccmp'、'nf'、'cf' 或 'zu'。

-mavx, -mno-avx
-mavx2, -mno-avx2
-mavx512bf16, -mno-avx512bf16
-mavx512bitalg, -mno-avx512bitalg
-mavx512bw, -mno-avx512bw
-mavx512cd, -mno-avx512cd
-mavx512dq, -mno-avx512dq
-mavx512f, -mno-avx512f
-mavx512fp16, -mno-avx512fp16
-mavx512ifma, -mno-avx512ifma
-mavx512vbmi, -mno-avx512vbmi
-mavx512vbmi2, -mno-avx512vbmi2
-mavx512vl, -mno-avx512vl
-mavx512vnni, -mno-avx512vnni
-mavx512vp2intersect, -mno-avx512vp2intersect
-mavx512vpopcntdq, -mno-avx512vpopcntdq
-mavxifma, -mno-avxifma
-mavxneconvert, -mno-avxneconvert
-mavxvnni, -mno-avxvnni
-mavxvnniint16, -mno-avxvnniint16
-mavxvnniint8, -mno-avxvnniint8
-mbmi, -mno-bmi
-mbmi2, -mno-bmi2
-mcldemote, -mno-cldemote
-mclflushopt, -mno-clflushopt
-mclwb, -mno-clwb
-mclzero, -mno-clzero
-mcmpccxadd, -mno-cmpccxadd
-mcrc32, -mno-crc32
-mcx16, -mno-cx16
-menqcmd, -mno-enqcmd
-mevex512, -mno-evex512
-mf16c, -mno-f16c
-mfma, -mno-fma
-mfma4, -mno-fma4
-mfsgsbase, -mno-fsgsbase
-mfxsr, -mno-fxsr
-mgfni, -mno-gfni
-mhreset, -mno-hreset
-minvpcid, -mno-invpcid
-mkl, -mno-kl
-mlwp, -mno-lwp
-mlzcnt, -mno-lzcnt
-mmmx, -mno-mmx
-mmovbe, -mno-movbe
-mmovdir64b, -mno-movdir64b
-mmovdiri, -mno-movdiri
-mmovrs, -mno-movrs
-mmwaitx, -mno-mwaitx
-mpclmul, -mno-pclmul
-mpconfig, -mno-pconfig
-mpku, -mno-pku
-mpopcnt, -mno-popcnt
-mprefetchi, -mno-prefetchi
-mprfchw, -mno-prfchw
-mptwrite, -mno-ptwrite
-mraoint, -mno-raoint
-mrdpid, -mno-rdpid
-mrdpru, -mno-rdpru
-mrdrnd, -mno-rdrnd
-mrdseed, -mno-rdseed
-mretpoline-external-thunk, -mno-retpoline-external-thunk
-mrtm, -mno-rtm
-msahf, -mno-sahf
-mserialize, -mno-serialize
-msgx, -mno-sgx
-msha, -mno-sha
-msha512, -mno-sha512
-mshstk, -mno-shstk
-msm3, -mno-sm3
-msm4, -mno-sm4
-msse, -mno-sse
-msse2, -mno-sse2
-msse3, -mno-sse3
-msse4.1, -mno-sse4.1
-msse4.2, -mno-sse4.2, -msse4
-msse4a, -mno-sse4a
-mssse3, -mno-ssse3
-mtbm, -mno-tbm
-mtsxldtrk, -mno-tsxldtrk
-muintr, -mno-uintr
-musermsr, -mno-usermsr
-mvaes, -mno-vaes
-mvpclmulqdq, -mno-vpclmulqdq
-mvzeroupper, -mno-vzeroupper
-mwaitpkg, -mno-waitpkg
-mwbnoinvd, -mno-wbnoinvd
-mwidekl, -mno-widekl
-mx87, -m80387, -mno-x87
-mxop, -mno-xop
-mxsave, -mno-xsave
-mxsavec, -mno-xsavec
-mxsaveopt, -mno-xsaveopt
-mxsaves, -mno-xsaves

X86 AVX10

-mavx10.1-256, -mavx10.1, -mno-avx10.1-256
-mavx10.1-512, -mno-avx10.1-512
-mavx10.2-256, -mavx10.2, -mno-avx10.2-256
-mavx10.2-512, -mno-avx10.2-512

RISC-V

-mforced-sw-shadow-stack, -mno-forced-sw-shadow-stack

强制使用软件影子堆栈,当启用影子堆栈时

-msave-restore, -mno-save-restore

启用使用库调用来保存和恢复

VE

-mvevpu, -mno-vevpu

为 VE 发射 VPU 指令

LoongArch

-mannotate-tablejump, -mno-annotate-tablejump

启用注释跳转表指令以将其与跳转表相关联。

-mfrecipe, -mno-frecipe

启用 frecipe.{s/d} 和 frsqrte.{s/d}

-mlam-bh, -mno-lam-bh

启用 amswap[_db].{b/h} 和 amadd[_db].{b/h}

-mlasx, -mno-lasx

启用龙芯高级 SIMD 扩展 (LASX)。

-mlsx, -mno-lsx

启用龙芯 SIMD 扩展 (LSX)。

-msimd=<arg>

选择在 LoongArch 中启用的 SIMD 扩展,可以是 'none'、'lsx' 或 'lasx'。

Long double 选项

选择 long double 实现

-mlong-double-128

强制 long double 为 128 位

-mlong-double-64

强制 long double 为 64 位

-mlong-double-80

强制 long double 为 80 位,为了存储填充到 128 位

优化级别

控制执行多少优化的标志。

-O<arg>, -O (equivalent to -O1), --optimize, --optimize=<arg>
-Ofast<arg>

已弃用;使用 ' -O3 -ffast-math ' 来获得相同的效果,或者使用 ' -O3 ' 来仅启用符合标准的优化

调试信息生成

控制生成多少以及哪种调试信息的标志。

调试信息类型和级别

-g, --debug, --debug=<arg>

生成源代码级调试信息

-gdwarf

使用默认的 DWARF 版本生成源代码级调试信息

-gdwarf-2

使用 DWARF 版本 2 生成源代码级调试信息

-gdwarf-3

使用 DWARF 版本 3 生成源代码级调试信息

-gdwarf-4

使用 DWARF 版本 4 生成源代码级调试信息

-gdwarf-5

使用 DWARF 版本 5 生成源代码级调试信息

-gdwarf32

如果启用了调试信息发射,则为 ELF 二进制文件启用 DWARF32 格式。

-gdwarf64

如果启用了调试信息发射,则为 ELF 二进制文件启用 DWARF64 格式。

-gfull
-ginline-line-tables, -gno-inline-line-tables
-gomit-unreferenced-methods, -gno-omit-unreferenced-methods
-gused
调试级别
-g0
-g2
-g3
-ggdb0
-ggdb1
-ggdb2
-ggdb3
-gline-directives-only

仅发射调试行信息指令

-gline-tables-only, -g1, -gmlt

仅发射调试行号表

-gmodules, -gno-modules

使用对 clang 模块或预编译头的外部引用生成调试信息

要调整调试信息的调试器
-gdbx
-ggdb
-glldb
-gsce

调试信息选项

-gcolumn-info, -gno-column-info
-gdwarf-aranges
-gembed-source, -gno-embed-source

将源代码文本嵌入 DWARF 调试部分

-ggnu-pubnames, -gno-gnu-pubnames
-gpubnames, -gno-pubnames
-grecord-command-line, -gno-record-command-line, -grecord-gcc-switches
-gsimple-template-names, -gno-simple-template-names
-gsplit-dwarf, -gno-split-dwarf
-gsplit-dwarf=<arg>

设置 DWARF 分裂模式。<arg> 必须是 ‘split’ 或 ‘single’。

-gstrict-dwarf, -gno-strict-dwarf

将 DWARF 功能限制为指定版本中定义的功能,避免使用更高版本中的功能。

-gtemplate-alias, -gno-template-alias
-gz=<arg>, -gz (equivalent to -gz=zlib)

DWARF 调试部分压缩类型

静态分析器选项

控制 Clang 静态分析器行为的标志。

-Xanalyzer <arg>

将 <arg> 传递给静态分析器

Fortran 编译选项

当 Clang 接收 Fortran 输入时,将传递给 gfortran 编译器的标志。

-A<arg>, --assert <arg>, --assert=<arg>
-A-<arg>
-faggressive-function-elimination, -fno-aggressive-function-elimination
-falign-commons, -fno-align-commons
-fall-intrinsics, -fno-all-intrinsics
-fbacktrace, -fno-backtrace
-fblas-matmul-limit=<arg>
-fbounds-check, -fno-bounds-check
-fcheck-array-temporaries, -fno-check-array-temporaries
-fcheck=<arg>
-fcoarray=<arg>
-fcray-pointer, -fno-cray-pointer
-fd-lines-as-code, -fno-d-lines-as-code
-fd-lines-as-comments, -fno-d-lines-as-comments
-fdollar-ok, -fno-dollar-ok
-fdump-fortran-optimized, -fno-dump-fortran-optimized
-fdump-fortran-original, -fno-dump-fortran-original
-fdump-parse-tree, -fno-dump-parse-tree
-fexternal-blas, -fno-external-blas
-ff2c, -fno-f2c
-ffpe-trap=<arg>
-ffree-line-length-<arg>
-ffrontend-optimize, -fno-frontend-optimize
-finit-character=<arg>
-finit-integer=<arg>
-finit-local-zero, -fno-init-local-zero
-finit-logical=<arg>
-finit-real=<arg>
-finteger-4-integer-8, -fno-integer-4-integer-8
-fmax-array-constructor=<arg>
-fmax-errors=<arg>
-fmax-identifier-length, -fno-max-identifier-length
-fmax-stack-var-size=<arg>
-fmax-subrecord-length=<arg>
-fmodule-private, -fno-module-private
-fpack-derived, -fno-pack-derived
-frange-check, -fno-range-check
-freal-4-real-10, -fno-real-4-real-10
-freal-4-real-16, -fno-real-4-real-16
-freal-4-real-8, -fno-real-4-real-8
-freal-8-real-10, -fno-real-8-real-10
-freal-8-real-16, -fno-real-8-real-16
-freal-8-real-4, -fno-real-8-real-4
-frealloc-lhs, -fno-realloc-lhs
-frecord-marker=<arg>
-frecursive, -fno-recursive
-frepack-arrays, -fno-repack-arrays
-fsecond-underscore, -fno-second-underscore
-fsign-zero, -fno-sign-zero
-fwhole-file, -fno-whole-file
-imultilib <arg>
-static-libgfortran

链接器选项

传递给链接器的标志

-L<dir>, --library-directory <arg>, --library-directory=<arg>

将目录添加到库搜索路径

-Mach
-T<script>

指定<script>作为链接器脚本

-Wl,<arg>,<arg2>...

将<arg>中以逗号分隔的参数传递给链接器

-X
-Xlinker <arg>, --for-linker <arg>, --for-linker=<arg>

将<arg>传递给链接器

-Xoffload-linker<triple> <arg>

将<arg>传递给异构计算链接器或由 -<triple>标识的链接器

-Z
-b<arg>

在 AIX 上将 -b <arg> 传递给链接器

-coverage, --coverage
-e <arg>, --entry
-filelist <arg>
-l<arg>
--ld-path=<arg>
-mxcoff-build-id=<0xHEXSTRING>

在 AIX 上,请求在链接的二进制文件内加载器部分的字符串表中创建一个构建 ID 字符串“0xHEXSTRING”

-nostartfiles
-nostdlib, --no-standard-libraries

使用新的异构计算链接器执行链接任务。

-pie, -no-pie
-r
-rdynamic
-rpath <arg>
-s
-shared, --shared
-specs=<arg>, --specs=<arg>
-startfiles
-static, --static
-static-pie
-stdlib
-t
-u<arg>, --force-link <arg>, --force-link=<arg>
-undef

取消定义所有系统宏

-undefined<arg>, --no-undefined
-z <arg>

将 -z <arg> 传递给链接器

clang-dxc 选项

dxc 兼容性选项。

--dxv-path=<arg>

DXIL 验证器安装路径

-fspv-target-env=<arg>

指定目标环境。<arg> 必须为 ‘vulkan1.2’ 或 ‘vulkan1.3’。

-hlsl-entry <arg>

hlsl 的入口点名称