编译器对象 (compiler)

该对象由 meson.get_compiler() 返回。它代表特定语言的编译器,允许您查询其属性。

返回值

编译器对象由以下函数和方法返回

注意

这些编译器检查不会使用通过 add_*_arguments() 添加的编译器参数,也不会使用命令行上的 -Dlang_args 或环境中的 CFLAGS/LDFLAGS 等。因此,您可以确信测试将完全独立,并且不会因为构建文件其他部分或用户添加的自定义标志而失败。

注意

请注意,如果您有一个包含所有依赖项的单一前缀,您可能会发现将环境变量 C_INCLUDE_PATH(用于 GCC/Clang)和 INCLUDE(用于 MSVC)追加到环境变量,以及将 LIBRARY_PATH(用于 GCC/Clang)和 LIB(用于 MSVC)追加到环境变量,以扩展默认的包含路径和库搜索路径更轻松。

但是,在交叉编译时,GCC 会忽略这些变量。在这种情况下,您需要使用规格文件。请参见:http://www.mingw.org/wiki/SpecsFileHOWTO

编译器对象方法

compiler.alignment()

返回指定类型的对齐方式。对于类似 C 的语言,在原生编译时会隐式包含头文件 stddef.hstdio.h,在交叉编译时只包含 stddef.h

签名

# Returns the alignment of the specified type
int alignment(
  str typename,     # The name of the type to check

  # Keyword arguments:
  args         : list[str]        # Used to pass a list of compiler arguments
  dependencies : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  prefix       : str | list[str]  # Used to add `#include`s and other things that are required
)

参数

方法 compiler.alignment() 接受以下位置参数

名称 类型 描述 标签
typename str

要检查的类型的名称。

最后,compiler.alignment() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。


compiler.check_header()

如果指定的头文件在指定的前缀、依赖项和参数下是“可用的”,则返回 true。

签名

(自 0.47.0 起)

# Returns true if the specified header is *usable*
bool check_header(
  str header_name,     # The header to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the header check fails
)

参数

方法 compiler.check_header() 接受以下位置参数

名称 类型 描述 标签
header_name str

要检查的头文件。

最后,compiler.check_header() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果头文件检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 0.50.0 起)

默认值为 false


compiler.cmd_array()

返回一个包含编译器命令的数组。

签名

list[str] cmd_array()


compiler.compiles()

如果代码编译成功,则返回 true。

签名

# Returns true if the code compiles
bool compiles(
  str | file code,     # The source code to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  name                : str              # The name to use for printing a message about the compiler check
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
  werror              : bool             # When set to `true`, compiler warnings are treated as error
)

参数

方法 compiler.compiles() 接受以下位置参数

名称 类型 描述 标签
code str | file

要检查的源代码。

如果传递字符串,则直接使用代码。如果传递 file 对象,则使用其内容进行编译器检查。

最后,compiler.compiles() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

name str

用于打印有关编译器检查消息的名称。如果没有传递此关键字参数,则不会打印有关检查的消息。

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.5.0 起)

默认值为 false

werror bool

当设置为 true 时,编译器警告将被视为错误。

(自 1.3.0 起)

默认值为 false


compiler.compute_int()

计算给定表达式的值(例如 1 + 2)。交叉编译时,这将使用迭代算法进行评估,您可以指定关键字参数 low(默认为 -1024)、high(默认为 1024)和 guess 来指定搜索的最大值和最小值以及要首先尝试的值。对于类似 C 的语言,在原生编译时会隐式包含头文件 stddef.hstdio.h,在交叉编译时只包含 stddef.h

签名

(自 0.40.0 起)

# Computes the value of the given expression
int compute_int(
  str expr,     # The expression to compute

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  guess               : int              # The value to try first
  high                : int              # The max value
  include_directories : inc | list[inc]  # Extra directories for header searches
  low                 : int              # The min value
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
)

参数

方法 compiler.compute_int() 接受以下位置参数

名称 类型 描述 标签
expr str

要计算的表达式。

最后,compiler.compute_int() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

guess int

要首先尝试的值。

high int

最大值。

默认值为 1024

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

low int

最小值。

默认值为 -1024

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。


compiler.find_library()

尝试查找位置参数中指定的库。

签名

# Tries to find the library specified in the positional argument
dep find_library(
  str libname,     # The library to find

  # Keyword arguments:
  dirs                       : list[str]        # Additional directories to search in
  disabler                   : bool             # If `true`, this method will return a disabler on a failed check.
  has_headers                : list[str]        # List of headers that must be found as well
  header_args                : list[str]        # When the `has_headers` kwarg is also used, this argument is passed to
  header_dependencies        : dep | list[dep]  # When the `has_headers` kwarg is also used, this argument is passed to
  header_include_directories : inc | list[inc]  # When the `has_headers` kwarg is also used, this argument is passed to
  header_no_builtin_args     : bool             # When the `has_headers` kwarg is also used, this argument is passed to
  header_prefix              : str              # When the `has_headers` kwarg is also used, this argument is passed to
  required                   : bool | feature   # If set `true`, Meson will abort with an error if the library could not
  static                     : bool             # If `true`, the search is limited to static libraries only
)

参数

方法 compiler.find_library() 接受以下位置参数

名称 类型 描述 标签
libname str

要查找的库。

最后,compiler.find_library() 接受以下关键字参数

名称 类型 描述 标签
dirs list[str]

要搜索的其他目录。

默认情况下,库将在系统库目录(例如 /usr/lib)中搜索。在这里指定更多目录会导致 Meson 也在这些目录以及系统目录中搜索。

disabler bool

如果为 true,则此方法将在检查失败时返回一个 disabler

(自 0.49.0 起)

默认值为 false

has_headers list[str]

必须找到的头文件列表。此检查等效于使用 compiler.has_header() 调用检查每个头文件。

当使用此关键字参数时,compiler.has_header() 接受的关键字参数可以在此处通过 header_ 前缀传递,并且将对头文件检查产生相同的效果。

(自 0.50.0 起)

header_args list[str]

当也使用 has_headers 关键字参数时,此参数将传递给 compiler.has_header() 作为 args

(自 0.51.0 起)

header_dependencies dep | list[dep]

当也使用 has_headers 关键字参数时,此参数将传递给 compiler.has_header() 作为 dependencies

(自 0.51.0 起)

header_include_directories inc | list[inc]

当也使用 has_headers 关键字参数时,此参数将传递给 compiler.has_header() 作为 include_directories

(自 0.51.0 起)

header_no_builtin_args bool

当也使用 has_headers 关键字参数时,此参数将传递给 compiler.has_header() 作为 no_builtin_args

(自 0.51.0 起)

默认值为 false

header_prefix str

当也使用 has_headers 关键字参数时,此参数将传递给 compiler.has_header() 作为 prefix

(自 0.51.0 起)

required bool | feature

如果设置为 true,则如果找不到库,Meson 会中止并显示错误。否则,Meson 会继续,并且返回对象的 found 方法将返回 false

当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 0.47.0 起) feature 选项的值也可以在此处传递。

默认值为 true

static bool

如果为 true,则搜索仅限于静态库。将此值设置为 false(默认值)将搜索共享库和静态库。

(自 0.51.0 起)

默认值为 false


compiler.first_supported_argument()

给定一个字符串列表,返回一个包含第一个通过 compiler.has_argument() 测试的参数的单元素列表,如果没有任何参数通过测试,则返回一个空数组。

签名

(自 0.43.0 起)

# Given a list of strings, returns a single-element list containing the first
list[str] first_supported_argument(
  str arg...,  # The arguments to check
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的参数。


给定一个字符串列表,返回第一个通过 compiler.has_link_argument() 测试的参数,如果没有任何参数通过测试,则返回一个空数组。

签名

(自 0.46.0 起)

# Given a list of strings, returns the first argument that passes the
list[str] first_supported_link_argument(
  str arg...,  # The link arguments to check
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的链接参数。


compiler.get_argument_syntax()

返回一个字符串,标识编译器接受的参数类型。可以是 gccmsvc 或未定义的字符串值。此方法用于识别不是 gcc 或 msvc 而是使用这两个编译器之一的相同参数语法的编译器,例如 clang 或 icc,尤其是在它们在不同的操作系统上使用不同的语法时。

签名

(自 0.49.0 起)

str get_argument_syntax()


compiler.get_define()

返回给定预处理器符号的值,以字符串形式表示,如果未定义,则返回空字符串。

(自 0.47.0 起) 此方法将连接字符串文字,就像编译器一样。例如 "a" "b" 将变为 "ab"

签名

(自 0.40.0 起)

# Returns the given preprocessor symbol's value
str get_define(
  str definename,     # The define to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
)

参数

方法 compiler.get_define() 接受以下位置参数

名称 类型 描述 标签
definename str

要检查的宏定义。

最后,compiler.get_define() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。


compiler.get_id()

返回一个字符串,标识编译器。例如,gccmsvc以及更多

签名

str get_id()


compiler.get_linker_id()

返回一个字符串,标识链接器。例如,ld.bfdlink以及更多

签名

(自 0.53.0 起)

str get_linker_id()


compiler.get_supported_arguments()

返回一个数组,其中只包含编译器支持的参数,就好像对它们分别调用了 compiler.has_argument() 一样。

签名

(自 0.43.0 起)

# Returns an array containing only the arguments supported by the compiler,
list[str] get_supported_arguments(
  str arg...,  # The arguments to check

  # Keyword arguments:
  checked : str  # Supported values:
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的参数。

方法 compiler.get_supported_arguments() 接受以下关键字参数

名称 类型 描述 标签
checked str

支持的值

  • 'off': 静默忽略不支持的参数
  • 'warn': 打印不支持参数的警告
  • 'require': 如果至少有一个参数不支持,则中止

(自 0.59.0)

默认 = 'off'


compiler.get_supported_function_attributes()

返回一个数组,其中包含所有支持的 GCC 样式属性名称。等效于对每个属性分别调用 compiler.has_function_attribute()

签名

(自 0.48.0)

list[str] get_supported_function_attributes()


返回一个数组,其中仅包含编译器支持的参数,就像对每个参数分别调用 compiler.has_link_argument() 一样。

签名

(自 0.46.0 起)

# Returns an array containing only the arguments supported by the compiler,
list[str] get_supported_link_arguments(
  str arg...,  # The link arguments to check
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的链接参数。


compiler.has_argument()

如果编译器接受指定命令行参数,则返回 true,即可以编译代码,不会出错或打印有关未知标志的警告。

签名

# Returns `true` if the compiler accepts the specified command line argument,
bool has_argument(
  str argument,     # The argument to check

  # Keyword arguments:
  required : bool | feature  # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_argument() 接受以下位置参数

名称 类型 描述 标签
argument str

要检查的参数。

最后,compiler.has_argument() 接受以下关键字参数

名称 类型 描述 标签
required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_define()

如果给定的预处理器符号已定义,则返回 true。

签名

(自 1.3.0 起)

# Returns true if the given preprocessor symbol is *defined*
bool has_define(
  str definename,     # The define to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
)

参数

方法 compiler.has_define() 接受以下位置参数

名称 类型 描述 标签
definename str

要检查的宏定义。

最后,compiler.has_define() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。


compiler.has_function()

如果给定函数由标准库或使用 args 关键字传递的库提供,则返回 true。

签名

# Returns true if the given function is provided
bool has_function(
  str funcname,     # The function to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_function() 接受以下位置参数

名称 类型 描述 标签
funcname str

要检查的函数。

最后,compiler.has_function() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_function_attribute()

如果编译器支持 GNU 样式 (__attribute__(...)) name,则返回 true。这比手动编译检查更可取,因为它可能针对不支持此类属性的编译器进行了优化。此表 列出了所有支持的属性。

签名

(自 0.48.0)

# Returns `true` if the compiler supports the GNU style (`__attribute__(
bool has_function_attribute(
  str name,     # The attribute name to check

  # Keyword arguments:
  required : bool | feature  # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_function_attribute() 接受以下位置参数

名称 类型 描述 标签
name str

要检查的属性名称。

最后,compiler.has_function_attribute() 接受以下关键字参数

名称 类型 描述 标签
required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_header()

如果指定标题以指定的前缀、依赖项和参数存在,则返回 true。

此方法比 compiler.check_header() 更快,因为它只进行预处理器检查。

签名

# Returns true if the specified header is *exists*
bool has_header(
  str header_name,     # The header to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the header check fails
)

参数

方法 compiler.has_header() 接受以下位置参数

名称 类型 描述 标签
header_name str

要检查的头文件。

最后,compiler.has_header() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果头文件检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 0.50.0 起)

默认值为 false


compiler.has_header_symbol()

检测指定标题中是否声明了特定符号。

此处的符号包括函数、变量、#define、类型定义等。

签名

# Detects whether a particular symbol is declared in the specified header
bool has_header_symbol(
  str header,     # The header to check
  str symbol,     # The symbol to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the header check fails
)

参数

方法 compiler.has_header_symbol() 接受以下位置参数

名称 类型 描述 标签
header str

要检查的头文件。

symbol str

要检查的符号。

最后,compiler.has_header_symbol() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果头文件检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 0.50.0 起)

默认值为 false


如果链接器接受指定的命令行参数,则返回 true,即可以编译和链接代码,不会出错或打印有关未知标志的警告。链接参数将传递给编译器,因此通常应该具有 -Wl, 前缀。在 VisualStudio 上,将添加 /link 参数。

签名

(自 0.46.0 起)

# Returns `true` if the linker accepts the specified command line argument,
bool has_link_argument(
  str argument,     # The argument to check

  # Keyword arguments:
  required : bool | feature  # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_link_argument() 接受以下位置参数

名称 类型 描述 标签

最后,compiler.has_link_argument() 接受以下关键字参数

名称 类型 描述 标签


compiler.has_member()

如果类型具有指定的成员,则返回 true。

签名

# Returns true if the type has the specified member
bool has_member(
  str typename,       # The type to check
  str membername,     # The member to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_member() 接受以下位置参数

名称 类型 描述 标签
typename str

要检查的类型。

membername str

要检查的成员。

最后,compiler.has_member() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_members()

如果类型具有所有指定的成员,则返回 true

签名

# Returns `true` if the type has *all* the specified members
bool has_members(
  str typename,     # The type to check
  str member...,    # The members to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_members() 接受以下位置参数

名称 类型 描述 标签
typename str

要检查的类型。

此外,该方法还接受 1infinity 个可变参数 (member...),类型为 str

要检查的成员

最后,compiler.has_members() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_multi_arguments()

compiler.has_argument() 相同,但接受多个参数,并在单个编译调用中使用它们。

签名

(自 0.37.0)

# the same as compiler.has_argument() but takes multiple arguments
bool has_multi_arguments(
  str arg...,  # The arguments to check

  # Keyword arguments:
  required : bool | feature  # When set to `true`, Meson will halt if the check fails
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的参数。

方法 compiler.has_multi_arguments() 接受以下关键字参数

名称 类型 描述 标签
required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


compiler.has_link_argument() 相同,但接受多个参数,并在单个编译调用中使用它们。

签名

(自 0.46.0 起)

# the same as compiler.has_link_argument() but takes multiple arguments
bool has_multi_link_arguments(
  str arg...,  # The link arguments to check

  # Keyword arguments:
  required : bool | feature  # When set to `true`, Meson will halt if the check fails
)

参数

该方法接受 0infinity 个可变参数(arg...)的类型为 str

要检查的链接参数。

方法 compiler.has_multi_link_arguments() 接受以下关键字参数

名称 类型 描述 标签


compiler.has_type()

如果指定的标记是类型,则返回 true

签名

# Returns `true` if the specified token is a type
bool has_type(
  str typename,     # The type to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
)

参数

方法 compiler.has_type() 接受以下位置参数

名称 类型 描述 标签
typename str

要检查的类型。

最后,compiler.has_type() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.3.0 起)

默认值为 false


如果代码编译并链接,则返回 true。

自 0.60.0,如果 file 对象的后缀与编译器对象的语言不匹配,则使用与后缀相对应的编译器来编译源代码,而使用 links 方法的目标来链接生成的 obj 文件。

签名

# Returns true if the code compiles and links
bool links(
  str | file code,     # The source code to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  name                : str              # The name to use for printing a message about the compiler check
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
  werror              : bool             # When set to `true`, compiler warnings are treated as error
)

参数

方法 compiler.links() 接受以下位置参数

名称 类型 描述 标签

最后,compiler.links() 接受以下关键字参数

名称 类型 描述 标签


compiler.preprocess()

预处理源文件列表,但不要编译它们。预处理器将接收与正常编译相同的参数(包含目录、定义等)。这包括例如使用 add_project_arguments() 添加的参数,或在命令行中使用 -Dc_args=-DFOO 添加的参数。

签名

(自 0.64.0)

# Preprocess a list of source files but do not compile them
list[custom_idx] preprocess(
  str | file | custom_tgt | custom_idx | generated_list source...,  # Input source to preprocess

  # Keyword arguments:
  compile_args        : list[str]                     # Extra flags to pass to the preprocessor
  dependencies        : dep | list[dep]               # Additionally dependencies required
  depends             : list[build_tgt | custom_tgt]  # Specifies that this target depends on the specified
  include_directories : inc | list[inc]               # Extra directories for header searches
  output              : str                           # Template for name of preprocessed files: `@PLAINNAME@` is replaced by
)

参数

该方法接受 0infinity 个可变参数 (source...),类型为 str | file | custom_tgt | custom_idx | generated_list

要预处理的输入源。支持以下类型

  • 相对于当前源目录的字符串

  • file 对象,在任何前面的构建文件中定义

  • 配置时生成器的返回值,例如 configure_file()

  • 构建时生成器的返回值,例如 custom_target()generator.process()

    方法 compiler.preprocess() 接受以下关键字参数

    名称 类型 描述 标签
    compile_args list[str]

    要传递给预处理器的额外标志

    dependencies dep | list[dep]

    此外还需要的依赖项。

    (自 1.1.0)

    depends list[build_tgt | custom_tgt]

    指定此目标依赖于指定的 target(s)。在开始预处理输入之前,应先构建这些 target。

    (自 1.4.0)

    include_directories inc | list[inc]

    头文件搜索的额外目录。

    (自 0.38.0 起)

    output str

    预处理文件的名称模板:@PLAINNAME@ 将替换为源文件名,@BASENAME@ 将替换为不带扩展名的源文件名。


compiler.run()

尝试编译并执行给定的代码片段。

签名

# Attempts to compile and execute the given code fragment
runresult run(
  str | file code,     # The source code to check

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  name                : str              # The name to use for printing a message about the compiler check
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  required            : bool | feature   # When set to `true`, Meson will halt if the check fails
  werror              : bool             # When set to `true`, compiler warnings are treated as error
)

参数

方法 compiler.run() 接受以下位置参数

名称 类型 描述 标签
code str | file

要检查的源代码。

如果传递字符串,则直接使用代码。如果传递 file 对象,则使用其内容进行编译器检查。

最后,compiler.run() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

name str

用于打印有关编译器检查消息的名称。如果没有传递此关键字参数,则不会打印有关检查的消息。

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

required bool | feature

当设置为 true 时,如果检查失败,Meson 会停止。当设置为 feature 选项时,该特性将控制是否搜索头文件以及在找不到头文件时是否失败。

(自 1.5.0 起)

默认值为 false

werror bool

当设置为 true 时,编译器警告将被视为错误。

(自 1.3.0 起)

默认值为 false


compiler.sizeof()

返回给定类型的大小(例如 'int'),如果类型未知,则返回 -1。对于类 C 语言,隐式包含标头 stddef.hstdio.h 以进行本机编译,在交叉编译时仅包含 stddef.h

签名

# returns the size of the given type (e
int sizeof(
  str typename,     # The type to compute

  # Keyword arguments:
  args                : list[str]        # Used to pass a list of compiler arguments
  dependencies        : dep | list[dep]  # Additionally dependencies required for compiling and / or linking
  include_directories : inc | list[inc]  # Extra directories for header searches
  no_builtin_args     : bool             # When set to `true`, the compiler arguments controlled by built-in configuration options are not added
  prefix              : str | list[str]  # Used to add `#include`s and other things that are required
)

参数

方法 compiler.sizeof() 接受以下位置参数

名称 类型 描述 标签
typename str

要计算的类型。

最后,compiler.sizeof() 接受以下关键字参数

名称 类型 描述 标签
args list[str]

用于传递编译器参数列表。通常支持通过 -Isome/path/to/header 定义不在默认包含路径中的头文件的包含路径,但通常不推荐这样做。

这是因为可以通过 include_directoriesdependency 关键字参数(如果存在)指定包含目录。对于传递要链接的库(例如 -lfoo),也是如此。

dependencies dep | list[dep]

另外,编译和/或链接所需的依赖项。

include_directories inc | list[inc]

头文件搜索的额外目录。

(自 0.38.0 起)

no_builtin_args bool

当设置为 true 时,不会添加由内置配置选项控制的编译器参数。

默认值为 false

prefix str | list[str]

用于添加 #include 和其他声明符号所需的元素。从 1.0.0 开始,也接受数组。当传递数组时,项目将通过换行符连接在一起。应通过编译器参数传递系统定义(例如:_GNU_SOURCE 通常需要在 Linux 上公开某些符号,应通过 args 关键字参数传递)。


compiler.symbols_have_underscore_prefix()

如果 C 符号改编是使用一个下划线 (_) 作为符号的前缀,则返回 true

签名

(自 0.37.0)

bool symbols_have_underscore_prefix()


compiler.version()

将编译器的版本号作为字符串返回。

签名

str version()


搜索结果为