参考表

编译器 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_machinehost_machinetarget_machinecpu_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 仍然会影响交叉构建)。

搜索结果是