参考表
编译器 ID
这些是编译器对象中 get_id(编译器家族)和 get_argument_syntax(参数语法)方法的返回值。
| 值 | 编译器家族 | 参数语法 |
|---|---|---|
| arm | ARM 编译器 | |
| armclang | ARMCLANG 编译器 | |
| ccomp | CompCert 正式验证的 C 编译器 | |
| ccrx | Renesas RX 系列 C/C++ 编译器 | |
| clang | Clang 编译器 | gcc |
| clang-cl | Clang 编译器(MSVC 兼容驱动程序) | msvc |
| dmd | D 语言参考编译器 | |
| emscripten | Emscripten WASM 编译器 | |
| flang | 经典 Flang Fortran 编译器 | |
| g95 | G95 Fortran 编译器 | |
| gcc | GNU 编译器集合 | gcc |
| intel | 英特尔编译器(Linux 和 Mac) | gcc |
| intel-cl | 英特尔编译器(Windows) | msvc |
| intel-llvm | 英特尔 oneAPI 基于 LLVM 的编译器 | |
| intel-llvm-cl | 英特尔 oneAPI 基于 LLVM 的编译器(Windows) | msvc |
| lcc | Elbrus C/C++/Fortran 编译器 | |
| llvm | 基于 LLVM 的编译器(Swift、D) | |
| llvm-flang | Flang Fortran 编译器(基于 LLVM) | |
| mono | Xamarin C# 编译器 | |
| mwccarm | Metrowerks 嵌入式 ARM C/C++ 编译器 | |
| mwcceppc | Metrowerks 嵌入式 PowerPC C/C++ 编译器 | |
| msvc | Microsoft Visual Studio | msvc |
| nagfor | NAG Fortran 编译器 | |
| nvidia_hpc | NVidia HPC SDK 编译器 | |
| nvcc | NVidia CUDA 编译器 | |
| open64 | Open64 Fortran 编译器 | |
| pathscale | Pathscale Fortran 编译器 | |
| pgi | Portland PGI C/C++/Fortran 编译器 | |
| rustc | Rust 编译器 | |
| sun | Sun Fortran 编译器 | |
| c2000 | 德州仪器 C/C++ 编译器(C2000) | |
| c6000 | 德州仪器 C/C++ 编译器(C6000) | |
| ti | 德州仪器 C/C++ 编译器 | |
| valac | Vala 编译器 | |
| xc16 | Microchip XC16 C 编译器 | |
| cython | Cython 编译器 | |
| nasm | NASM 编译器(自 0.64.0 起) | |
| yasm | YASM 编译器(自 0.64.0 起) | |
| ml | Microsoft Macro Assembler for x86 and x86_64 (自 0.64.0 起) | msvc |
| armasm | Microsoft Macro Assembler for ARM and AARCH64 (自 0.64.0 起) | |
| mwasmarm | Metrowerks 嵌入式 ARM 汇编器 | |
| mwasmeppc | Metrowerks 嵌入式 PowerPC 汇编器 |
链接器 ID
这些是编译器对象中 get_linker_id 方法的返回值。
| 值 | 链接器家族 |
|---|---|
| ld.bfd | GNU 链接器 |
| ld.gold | GNU gold 链接器 |
| ld.lld | LLVM 链接器,具有 GNU 接口 |
| ld.mold | 快速 MOLD 链接器 |
| ld.solaris | Solaris 和 illumos |
| ld.wasm | emscripten 的 wasm-ld 链接器 |
| ld.zigcc | Zig 链接器(C/C++ 前端;类似 GNU) |
| ld64 | Apple ld64 |
| ld64.lld | LLVM 链接器,具有 ld64 接口 |
| link | MSVC 链接器 |
| lld-link | LLVM 链接器,具有 MSVC 接口 |
| xilink | 仅与 Intel-cl 一起使用,类似 MSVC |
| optlink | optlink(与 DMD 一起使用) |
| rlink | Renesas 链接器,仅与 CCrx 一起使用 |
| xc16-ar | Microchip 链接器,仅与 XC16 一起使用 |
| ar2000 | 德州仪器链接器,仅与 C2000 一起使用 |
| ti-ar | 德州仪器链接器 |
| ar6000 | 德州仪器链接器,仅与 C6000 一起使用 |
| armlink | ARM 链接器(arm 和 armclang 编译器) |
| pgi | Portland/Nvidia PGI |
| nvlink | Nvidia 链接器,与 cuda 一起使用 |
| ccomp | CompCert 用作链接器驱动程序 |
| mwldarm | Metrowerks 链接器,具有 ARM 接口,仅与 mwccarm 一起使用 |
| mwldeppc | Metrowerks 链接器,具有 PowerPC 接口,仅与 mwcceppc 一起使用 |
对于没有单独的动态链接器(如 C# 和 Java)的语言,get_linker_id 将返回编译器名称。
脚本环境变量
| 值 | 注释 |
|---|---|
| MESONINTROSPECT | 运行内省命令的命令,可能采用 python /path/to/meson introspect 的形式,用户负责在必要时拆分路径。 |
| MESONREWRITE | 运行重写命令的命令,仅在运行 dist 脚本时设置 |
| MESON_BUILD_ROOT | 构建目录的绝对路径 |
| MESON_DIST_ROOT | 指向暂存目录的根目录,仅在运行 dist 脚本时设置 |
| MESON_SOURCE_ROOT | 源目录的绝对路径 |
| MESON_SUBDIR | 当前子目录,仅为 run_command 设置 |
CPU 家族
这些由 build_machine、host_machine 和 target_machine 的 cpu_family 方法返回。对于交叉编译,它们在交叉文件中设置。
| 值 | 注释 |
|---|---|
| aarch64 | 64 位 ARM 处理器 |
| alpha | DEC Alpha 处理器 |
| arc | 32 位 ARC 处理器 |
| arm | 32 位 ARM 处理器 |
| avr | Atmel AVR 处理器 |
| c2000 | 32 位 C2000 处理器 |
| c6000 | 32 位 C6000 处理器 |
| csky | 32 位 CSky 处理器 |
| dspic | 16 位 Microchip dsPIC |
| e2k | MCST Elbrus 处理器 |
| ft32 | 32 位 Bridgetek MCU |
| ia64 | Itanium 处理器 |
| loongarch64 | 64 位 Loongson 处理器 |
| m68k | 摩托罗拉 68000 处理器 |
| microblaze | MicroBlaze 处理器 |
| mips | 32 位 MIPS 处理器 |
| mips64 | 64 位 MIPS 处理器 |
| msp430 | 16 位 MSP430 处理器 |
| parisc | HP PA-RISC 处理器 |
| pic24 | 16 位 Microchip PIC24 |
| ppc | 32 位 PPC 处理器 |
| ppc64 | 64 位 PPC 处理器 |
| riscv32 | 32 位 RISC-V 开放 ISA |
| riscv64 | 64 位 RISC-V 开放 ISA |
| rl78 | Renesas RL78 |
| rx | Renesas RX 32 位 MCU |
| s390 | IBM zSystem s390 |
| s390x | IBM zSystem s390x |
| sh4 | SuperH SH-4 |
| sparc | 32 位 SPARC |
| sparc64 | SPARC v9 处理器 |
| sw_64 | 64 位 sunway 处理器 |
| wasm32 | 32 位 Webassembly |
| wasm64 | 64 位 Webassembly |
| x86 | 32 位 x86 处理器 |
| x86_64 | 64 位 x86 处理器 |
任何未在上述列表中列出的 CPU 家族都不能保证在未来的版本中保持稳定。
从 autotools 移植的用户应注意,Meson 不会将字节序添加到 cpu_family 的名称中。例如,autotools 将小端 PPC64 称为 "ppc64le",Meson 不会,你必须也检查机器的 .endian() 值以获取此信息。
操作系统名称
这些由 .system() 方法调用提供。
| 值 | 注释 |
|---|---|
| android | 仅按惯例,可能会更改 |
| cygwin | Windows 上的 Cygwin 或 MSYS2 环境 |
| darwin | OSX 或 iOS |
| dragonfly | DragonFly BSD |
| emscripten | Emscripten 的 JavaScript 环境 |
| freebsd | FreeBSD 及其衍生版本 |
| gnu | GNU Hurd |
| haiku | |
| linux | |
| netbsd | |
| openbsd | |
| windows | 本机 Windows(不是 Cygwin 或 MSYS2) |
| sunos | illumos 和 Solaris |
任何未在上述列表中列出的字符串都不能保证在未来的版本中保持稳定。
内核名称(自 1.2.0 起)
.kernel() 方法返回的本机名称。
| 值 | 注释 |
|---|---|
| linux | |
| freebsd | |
| openbsd | |
| netbsd | |
| gnu | GNU Hurd |
| nt | |
| xnu | 各种 Apple 操作系统的内核 |
| illumos | 由社区努力从 OpenSolaris 派生的内核 |
| solaris | 由 Oracle 从 OpenSolaris 派生的内核 |
| dragonfly | |
| haiku | |
| none | 例如,裸机嵌入式 |
子系统名称(自 1.2.0 起)
对所讨论系统的更具体的描述。大多数值仅用于交叉文件,因为这些平台不能本地运行 Meson。
| 值 | 注释 |
|---|---|
| macos | Apple macOS(以前为 OSX) |
| ios | Apple iOS |
| ios-simulator | |
| tvos | Apple tvOS |
| tvos-simulator | |
| watchos | Apple watchOS |
| watchos-simulator |
语言参数参数名称
这些是将特定于语言的参数传递给构建目标的参数名称。
| 语言 | 编译器名称 | 链接器名称 |
|---|---|---|
| C | c_args | c_link_args |
| C++ | cpp_args | cpp_link_args |
| C# | cs_args | cs_link_args |
| CUDA | cuda_args | cuda_link_args |
| D | d_args | d_link_args |
| Fortran | fortran_args | fortran_link_args |
| Java | java_args | java_link_args |
| Objective C | objc_args | objc_link_args |
| Objective C++ | objcpp_args | objcpp_link_args |
| Rust | rust_args | rust_link_args |
| Vala | vala_args | vala_link_args |
| Cython | cython_args | cython_link_args |
| NASM | nasm_args | N/A |
| MASM | masm_args | N/A |
所有这些 <lang>_* 选项都是针对每台机器指定的。请参阅 为每台机器指定选项,了解如何在交叉构建中执行此操作。
编译器和链接器标志环境变量
这些环境变量将用于修改编译器和链接器标志。
建议您**不要使用这些**。它们仅出于与其他构建系统的向后兼容性而提供。使用它们有很多注意事项,尤其是在重建项目时。**强烈**建议您使用 命令行参数。
| 名称 | 注释 |
|---|---|
| CFLAGS | C 编译器的标志 |
| CXXFLAGS | C++ 编译器的标志 |
| CUFLAGS | CUDA 编译器的标志 |
| OBJCFLAGS | Objective C 编译器的标志 |
| FFLAGS | Fortran 编译器的标志 |
| DFLAGS | D 编译器的标志 |
| VALAFLAGS | Vala 编译器的标志 |
| RUSTFLAGS | Rust 编译器的标志 |
| CYTHONFLAGS | Cython 编译器的标志 |
| LDFLAGS | 链接器标志,用于所有语言 |
注意:这些设置是针对每台机器指定的,因此环境变量实际上是成对出现的。有关详细信息,请参阅 每台机器的环境变量 部分。
函数属性
这些是使用 compiler.has_function_attribute() 或 compiler.get_supported_function_attributes() 支持的参数名称
GCC __attribute__
这些值使用 GCC 风格的 __attribute__ 注释支持,这些注释由 GCC、Clang 和其他编译器支持。
| 名称 |
|---|
| alias |
| aligned |
| alloc_size |
| always_inline |
| artificial |
| cold |
| const |
| constructor |
| constructor_priority |
| deprecated |
| destructor |
| error |
| externally_visible |
| fallthrough |
| flatten |
| format |
| format_arg |
| force_align_arg_pointer³ |
| gnu_inline |
| hot |
| ifunc |
| malloc |
| noclone |
| noinline |
| nonnull |
| noreturn |
| nothrow |
| null_terminated_string_arg⁷ |
| optimize |
| packed |
| pure |
| retain⁴ |
| returns_nonnull |
| section⁵ |
| sentinel⁵ |
| unused |
| used |
| vector_size⁶ |
| visibility* |
| visibility:default† |
| visibility:hidden† |
| visibility:internal† |
| visibility:protected† |
| 警告 |
| warn_unused_result |
| 弱 |
| 弱引用 |
* 0.52.0 中更改 "visibility" 目标不再包含 "protected",因为 Apple 的 clang 中没有 "protected"。
† 0.52.0 中新增 这些拆分的可见性属性优先于简单的 "visibility",因为它们提供了更窄的检查。
³ 0.55.0 中新增
⁴ 0.62.0 中新增
⁵ 0.63.0 中新增
⁶ 1.1.0 中新增
⁷ 1.5.0 中新增
MSVC __declspec
这些值可以使用 MSVC 风格的 __declspec 注释来支持,这些注释受到 MSVC、GCC、Clang 和其他编译器的支持。
| 名称 |
|---|
| dllexport |
| dllimport |
依赖项查找方法
这些是可以传递给 dependency 函数的 method 关键字参数的值。
| 名称 | 注释 |
|---|---|
| 自动 | 自动方法选择 |
| pkg-config | 使用 Pkg-Config |
| cmake | 作为 CMake 模块查找 |
| 配置工具 | 使用自定义的依赖工具,例如 cups-config |
| 系统 | 系统提供(例如 OpenGL) |
| extraframework | macOS/iOS 框架 |
编译器和链接器选择变量
注意:这些设置是针对每台机器指定的,因此环境变量实际上是成对出现的。有关详细信息,请参阅 每台机器的环境变量 部分。
| 语言 | 编译器 | 链接器 | 注意 |
|---|---|---|---|
| C | CC | CC_LD | |
| C++ | CXX | CXX_LD | |
| D | DC | DC_LD | 0.54 之前的 D_LD* |
| Fortran | FC | FC_LD | 0.54 之前的 F_LD* |
| Objective-C | OBJC | OBJC_LD | |
| Objective-C++ | OBJCXX | OBJCXX_LD | 0.54 之前的 OBJCPP_LD* |
| Rust | RUSTC | RUSTC_LD | 0.54 之前的 RUST_LD* |
| Vala | VALAC | 使用 CC_LD。Vala 编译成 C | |
| C# | CSC | CSC | 链接器是编译器 |
| Cython | CYTHON | ||
| nasm | NASM | 使用 C 链接器 |
*旧的环境变量仍然受支持,但已弃用,将在 Meson 的未来版本中删除。
1.3.0 中更改 包含空格的路径会被无条件地拆分以提取组件,例如 Ccache 的路径、固有编译器标志(如 -m32 或 --target)等。这会破坏将硬编码的编译器路径传递给 CMake 子项目。为了解决这个问题,路径必须用双引号括起来
export CC='"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe"'
您也可以通过 机器文件 设置这些值。
1.3.0 中新增 指向现有可执行文件的路径不再需要括起来
export CC='C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe'
每个机器的环境变量
从 0.54.0 开始,遵循 Autotool 和其他旧的构建系统,影响机器特定设置的环境变量成对出现:对于每个裸环境变量 FOO,都有一个后缀为 FOO_FOR_BUILD 的变量,其中 FOO 仅影响主机配置,而 FOO_FOR_BUILD 仅影响构建机器配置。例如
-
PKG_CONFIG_PATH_FOR_BUILD控制 pkg-config 将搜索的路径,仅用于native: true依赖项(构建机器)。 -
PKG_CONFIG_PATH控制 pkg-config 将搜索的路径,仅用于native: false依赖项(主机)。
这反映了用于(内置)Meson 选项的 build. 前缀,它具有相同的含义。
这对交叉构建很有用。在原生构建中,构建 = 主机,并且仅无后缀的环境变量就足够了。
在 0.54.0 之前,没有 _FOR_BUILD 后缀的变量,大多数环境变量只影响原生机器配置,尽管这并不一致(例如 PKG_CONFIG_PATH 仍然会影响交叉构建)。
搜索结果是