依赖项
很少有应用程序是完全独立的,相反,它们使用外部库和框架来完成工作。Meson 使查找和使用外部依赖项变得非常容易。以下是如何使用 zlib 压缩库。
zdep = dependency('zlib', version : '>=1.2.8')
exe = executable('zlibprog', 'prog.c', dependencies : zdep)
首先,告诉 Meson 查找外部库 zlib,如果找不到则报错。version 关键字是可选的,它指定了对依赖项的版本要求。然后使用指定的依赖项构建可执行文件。请注意,用户不需要手动处理编译器或链接器标志,也不需要处理任何其他细枝末节。
如果有多个依赖项,请将它们作为数组传递
executable('manydeps', 'file.c', dependencies : [dep1, dep2, dep3, dep4])
如果依赖项是可选的,则可以告诉 Meson 在找不到依赖项时不要报错,然后进行进一步配置。
opt_dep = dependency('somedep', required : false)
if opt_dep.found()
# Do something.
else
# Do something else.
endif
无论实际依赖项是否找到,您都可以将 opt_dep 变量传递给目标构建函数。Meson 会忽略未找到的依赖项。
Meson 还允许您获取在 pkg-config 文件中定义的变量。这可以通过使用 dep.get_pkgconfig_variable() 函数来完成。
zdep_prefix = zdep.get_pkgconfig_variable('prefix')
这些变量也可以通过传递 define_variable 参数来重新定义,这在某些情况下可能有用。
zdep_prefix = zdep.get_pkgconfig_variable('libdir', define_variable: ['prefix', '/tmp'])
依赖项检测器适用于所有提供 pkg-config 文件的库。不幸的是,一些包没有提供 pkg-config 文件。Meson 对其中的一些包提供了自动检测支持,将在 本页面的后面部分 进行介绍。
可以以多种方式找到的依赖项的任意变量
注意 0.51.0 中新增 0.54.0 中新增,internal 关键字
当您需要从可以以多种方式找到的依赖项中获取任意变量,并且不想限制类型时,可以使用通用的 get_variable 方法。目前,它支持基于 cmake、pkg-config 和 config-tool 的变量。
foo_dep = dependency('foo')
var = foo_dep.get_variable(cmake : 'CMAKE_VAR', pkgconfig : 'pkg-config-var', configtool : 'get-var', default_value : 'default')
它接受关键字 'cmake'、'pkgconfig'、'pkgconfig_define'、'configtool'、'internal'、'system' 和 'default_value'。'pkgconfig_define' 的工作方式与 get_pkgconfig_variable 的 'define_variable' 参数相同。当调用此方法时,将使用对应于依赖项底层类型的关键字来查找变量。如果找不到该变量,或者调用者没有为依赖项类型提供参数,则会发生以下情况之一:如果提供了 'default_value',则会返回该值,如果没有提供 'default_value',则会引发错误。
提供资源文件的依赖项
有时,依赖项会提供可安装文件,其他项目需要使用这些文件。例如,wayland-protocols XML 文件。
foo_dep = dependency('foo')
foo_datadir = foo_dep.get_variable('pkgdatadir')
custom_target(
'foo-generated.c',
input: foo_datadir / 'prototype.xml',
output: 'foo-generated.c',
command: [generator, '@INPUT@', '@OUTPUT@']
)
自 0.63.0 起,这些文件实际上按预期工作,即使它们来自(格式良好的)内部依赖项。这仅在将要获取的文件视为与系统依赖项互换时才有效——例如,仅可以使用公共文件,并且不允许离开依赖项指向的目录。
声明您自己的
您可以声明您自己的依赖项对象,这些对象可以与从系统获得的依赖项对象互换使用。语法很简单
my_inc = include_directories(...)
my_lib = static_library(...)
my_dep = declare_dependency(link_with : my_lib,
include_directories : my_inc)
这声明了一个依赖项,它将给定的包含目录和静态库添加到您使用它的任何目标中。
将依赖项作为子项目构建
许多平台不提供系统包管理器。在这些系统上,必须从源代码编译依赖项。Meson 的子项目使在可用时使用系统依赖项以及在不可用时手动构建依赖项变得很简单。
为了使这能够工作,依赖项必须具有 Meson 构建定义,并且必须声明其自己的依赖项,如下所示
foo_dep = declare_dependency(...)
然后,任何想要使用它的项目都可以在其主 meson.build 文件中编写以下声明。
foo_dep = dependency('foo', fallback : ['foo', 'foo_dep'])
此声明意味着,首先,Meson 尝试从系统中查找依赖项(例如,通过使用 pkg-config)。如果它不可用,则它构建名为 foo 的子项目,并从中提取变量 foo_dep。这意味着此函数的返回值是外部或内部依赖项对象。由于它们可以互换使用,因此构建定义的其余部分不需要关心它是什么。Meson 会在幕后完成所有工作以使这一切能够工作。
依赖项检测方法
您可以使用关键字 method 让 Meson 知道在搜索依赖项时使用什么方法。默认值为 auto。其他方法包括 pkg-config、config-tool、cmake、builtin、system、sysconfig、qmake、extraframework 和 dub。
cups_dep = dependency('cups', method : 'pkg-config')
对于没有 特定检测逻辑 的依赖项,auto 的依赖项方法顺序为
pkg-configcmake-
extraframework(仅限 OSX)
系统
一些依赖项没有提供有效的发现方法,或者仅在某些情况下提供。例如,Zlib 提供了 pkg-config 和 cmake,除了它是基本操作系统映像的一部分(例如在 FreeBSD 和 macOS 中);OpenGL 在 Unices 上从 glvnd 或 mesa 中具有 pkg-config,但在 macOS 和 Windows 上没有 pkg-config。
在这些情况下,Meson 以 system 依赖项的形式提供方便的包装器。在内部,这些依赖项与用户在构建系统 DSL 中或使用脚本中执行的操作完全相同,可能调用 compiler.find_library(),设置 link_with 和 include_directories。通过将它们放在 Meson 上游,使用它们的障碍降低了,因为使用 Meson 的项目不需要重新实现逻辑。
内置
某些依赖项在某些系统上没有提供有效的发现方法,因为它们是语言内部提供的。一个例子是 intl,它内置在 GNU 或 musl libc 中,但在其他情况下则作为 system 依赖项提供。
在这些情况下,Meson 为 system 依赖项提供方便的包装器,但首先会检查该功能是否默认可用。
CMake
Meson 可以使用 CMake find_package() 函数来检测使用内置 Find<NAME>.cmake 模块和导出项目配置(通常位于 /usr/lib/cmake 中)的依赖项。Meson 能够使用旧式的 <NAME>_LIBRARIES 变量以及导入的目标。
可以使用 modules 属性手动指定应使用的 CMake 目标列表。但是,此步骤是可选的,因为 Meson 尝试根据依赖项的名称自动猜测正确目标。
根据依赖项,如果 Meson 无法自动猜测,可能需要使用 modules 属性显式指定 CMake 目标。
cmake_dep = dependency('ZLIB', method : 'cmake', modules : ['ZLIB::ZLIB'])
使用 components 关键字参数(在 0.54.0 中引入)提供对为 CMake find_package 查找添加额外 COMPONENTS 的支持。所有指定的组件将直接传递给 find_package(COMPONENTS)。
使用 cmake_package_version 关键字参数(在 0.57.0 中引入)提供对需要指定版本的包的支持,以便 CMake find_package 成功。指定的 cmake_package_version 将直接作为第二个参数传递给 find_package。
也可以使用 cmake_module_path 属性(自 0.50.0 起)重用现有的 Find<name>.cmake 文件。使用此属性相当于在 CMake 中设置 CMAKE_MODULE_PATH 变量。传递给 cmake_module_path 的路径都应相对于项目源目录。仅当 CMake 文件未存储在项目本身中时,才应使用绝对路径。
可以使用 cmake_args 属性(自 0.50.0 起)指定其他 CMake 参数。
Dub
请理解,Meson 只能找到本地 Dub 存储库中存在的依赖项。您需要手动获取并构建目标依赖项。
对于 urld。
dub fetch urld
dub build urld
您还需要记住,Meson 和 Dub 需要使用相同的编译器。这可以通过使用 Dub 的 -compiler 参数和/或在运行 Meson 时手动设置 DC 环境变量来实现。
dub build urld --compiler=dmd
DC="dmd" meson setup builddir
配置工具
CUPS、LLVM、ObjFW、pcap、WxWidgets、libwmf、GCrypt、GPGME 和 GnuStep 既不提供 pkg-config 模块,也可以通过配置工具进行检测(cups-config、llvm-config、libgcrypt-config 等)。Meson 对这些工具具有原生支持,可以像其他依赖项一样找到它们
pcap_dep = dependency('pcap', version : '>=1.0')
cups_dep = dependency('cups', version : '>=1.4')
llvm_dep = dependency('llvm', version : '>=4.0')
libgcrypt_dep = dependency('libgcrypt', version: '>= 1.8')
gpgme_dep = dependency('gpgme', version: '>= 1.0')
objfw_dep = dependency('objfw', version: '>= 1.0')
自 0.55.0 起,如果交叉编译的配置文件中没有配置工具的条目,Meson 不会再搜索 $PATH 以查找配置工具二进制文件。
具有自定义查找功能的依赖项
一些依赖项具有特定的检测逻辑。
通用依赖项名称区分大小写1,但这些依赖项名称的匹配不区分大小写。建议的样式是使用全小写字母编写它们。
在某些情况下,存在多种检测方法,可以使用 method 关键字来选择要使用的检测方法。auto 方法按 Meson 认为最佳的顺序使用任何检查机制。
例如,libwmf 和 CUPS 提供了 pkg-config 和 config-tool 支持。您可以通过 method 关键字强制使用其中一个
cups_dep = dependency('cups', method : 'pkg-config')
wmf_dep = dependency('libwmf', method : 'config-tool')
AppleFrameworks
使用 modules 关键字列出所需的框架,例如
dep = dependency('appleframeworks', modules : 'foundation')
这些依赖项永远无法在非 OSX 主机上找到。
块
启用对 Clang 的块扩展的支持。
dep = dependency('blocks')
(添加于 0.52.0)
Boost
Boost 不是一个单独的依赖项,而是一组不同的库。要使用 Boost 的头文件库,只需添加 Boost 作为依赖项即可。
boost_dep = dependency('boost')
exe = executable('myprog', 'file.cc', dependencies : boost_dep)
要使用 Meson 链接到 Boost,只需列出您要使用的库即可。
boost_dep = dependency('boost', modules : ['thread', 'utility'])
exe = executable('myprog', 'file.cc', dependencies : boost_dep)
您可以多次调用 dependency(),使用不同的模块,并使用这些模块链接到您的目标。
如果您的 Boost 头文件或库位于非标准位置,您可以设置 BOOST_ROOT 或 BOOST_INCLUDEDIR 和 BOOST_LIBRARYDIR 环境变量。(添加于 0.56.0) 您还可以将这些参数设置为本地或交叉机器文件中的 boost_root、boost_includedir 和 boost_librarydir。请注意,机器文件变量优先于环境变量,并且指定任何这些参数都会禁用系统范围的 Boost 搜索。
您可以将参数 threading 设置为 single 以使用为单线程使用而编译的 Boost 库。
CUDA
(添加于 0.53.0)
启用针对 CUDA 工具包的编译和链接。可以传递version和modules关键字来请求使用特定 CUDA 工具包版本和/或额外的 CUDA 库,相应地。
dep = dependency('cuda', version : '>=10', modules : ['cublas'])
请注意,仅当您在 C/C++ 文件或项目中使用 CUDA 工具包,或者您正在使用需要显式链接的额外工具包库时,才需要显式添加此依赖项。如果在系统上的默认路径中找不到 CUDA 工具包,您可以使用CUDA_PATH显式设置路径。
CUPS
method可以是auto、config-tool、pkg-config、cmake或extraframework。
Curses
(自 0.54.0 起)
Curses(和 ncurses)是一个跨平台的麻烦事。Meson 将这些依赖关系包装在curses依赖项中。这涵盖了ncurses(首选)和其他 curses 实现。
method可以是auto、pkg-config、config-tool或system。
0.56.0 中新增 config-tool和system方法。
要定义 curses autoconf 文档中提到的某些预处理器符号。
conf = configuration_data()
check_headers = [
['ncursesw/menu.h', 'HAVE_NCURSESW_MENU_H'],
['ncurses/menu.h', 'HAVE_NCURSES_MENU_H'],
['menu.h', 'HAVE_MENU_H'],
['ncursesw/curses.h', 'HAVE_NCURSESW_CURSES_H'],
['ncursesw.h', 'HAVE_NCURSESW_H'],
['ncurses/curses.h', 'HAVE_NCURSES_CURSES_H'],
['ncurses.h', 'HAVE_NCURSES_H'],
['curses.h', 'HAVE_CURSES_H'],
]
foreach h : check_headers
if compiler.has_header(h.get(0))
conf.set(h.get(1), 1)
endif
endforeach
dl (libdl)
(添加于 0.62.0)
提供对动态链接接口的访问(函数:dlopen、dlclose、dlsym 等)。在未将此功能内置到 libc 的系统上(主要是 glibc < 2.34),尝试找到提供它们的外部库。
method可以是auto、builtin或system。
Fortran 共数组
(添加于 0.50.0)
共数组是 Fortran 语言的内在特性,由dependency('coarray')启用。
如果存在,GCC 将使用 OpenCoarrays 来实现共数组,而 Intel 和 NAG 将使用内部共数组支持。
GPGME
(添加于 0.51.0)
method可以是auto、config-tool或pkg-config。
GL
这将以适合平台的方式找到 OpenGL 库。
method可以是auto、pkg-config或system。
GTest 和 GMock
GTest 和 GMock 作为源代码提供,必须作为项目的一部分进行编译。使用 Meson,您不必关心细节,只需将gtest或gmock传递给dependency,它将为您完成所有工作。如果您想使用 GMock,建议也使用 GTest,因为单独使用 GMock 很难实现。
您可以将main关键字参数设置为true以使用 GTest 提供的main()函数
gtest_dep = dependency('gtest', main : true, required : false)
e = executable('testprog', 'test.cc', dependencies : gtest_dep)
test('gtest test', e)
HDF5
(添加于 0.50.0)
HDF5 支持 C、C++ 和 Fortran。由于依赖项是特定于语言的,因此您必须使用language关键字参数指定所需的语言,例如:
-
dependency('hdf5', language: 'c')用于 C HDF5 头文件和库 -
dependency('hdf5', language: 'cpp')用于 C++ HDF5 头文件和库 -
dependency('hdf5', language: 'fortran')用于 Fortran HDF5 头文件和库
标准低级 HDF5 函数和HL高级 HDF5 函数将为每种语言链接。
method可以是auto、config-tool或pkg-config。
0.56.0 中新增 config-tool方法。0.56.0 中新增 这些依赖项现在将返回正确的依赖项类型,get_variable和类似方法应按预期工作。
iconv
(添加于 0.60.0)
提供对iconv系列 C 函数的访问。在未将此功能内置到 libc 的系统上,尝试找到提供它们的外部库。
method可以是auto、builtin或system。
intl
(添加于 0.59.0)
提供对*gettext系列 C 函数的访问。在未将此功能内置到 libc 的系统上,尝试找到提供它们的外部库。
method可以是auto、builtin或system。
JDK
(添加于 0.58.0) (已弃用 0.62.0)
JNI 的已弃用名称。使用dependency('jdk')而不是dependency('jni')。
JNI
(添加于 0.62.0)
modules是一个可选的字符串列表,包含jvm和awt中的任何一个。
提供使用 Java Native Interface (JNI) 进行编译的访问权限。查找将首先检查环境中是否设置了JAVA_HOME,如果没有,将使用javac解析的路径。系统通常会将您首选的 JDK 链接到众所周知的路径,例如 Linux 上的/usr/bin/javac。使用JAVA_HOME或解析的javac的路径,此依赖项将将 JDK 安装的include目录及其平台相关的子目录放在编译器的包含路径中。如果modules非空,则还会添加正确的链接器参数。
dep = dependency('jni', version: '>= 1.8.0', modules: ['jvm'])
注意:由于使用了解析的路径,升级 JDK 可能会导致找不到各种路径。在这种情况下,请重新配置构建目录。一种解决方法是显式设置JAVA_HOME,而不是依赖于回退javac解析的路径行为。
注意:除了linux、windows、darwin和sunos之外的其他平台上的包含路径可能已损坏。在这种情况下,请提交 PR 或打开问题。
注意:如果您的系统不是x86_64,则在 JDK <= 1.8上使用modules参数可能会出现问题。在这种情况下,请提交 PR 或打开问题。
libgcrypt
(添加于 0.49.0)
method可以是auto、config-tool或pkg-config。
libwmf
(添加于 0.44.0)
method可以是auto、config-tool或pkg-config。
LLVM
Meson 对 LLVM 的原生支持可以追溯到 LLVM 版本 3.5。与其他基于配置工具的依赖项相比,它支持一些额外的功能。
从 0.44.0 开始,Meson 支持 LLVM 的static关键字参数。在此之前,LLVM >= 3.9 始终会动态链接,而旧版本会静态链接,这是由于llvm-config中的一个怪癖造成的。
method可以是auto、config-tool或cmake。
模块,也称为组件
Meson 将 LLVM 的组件概念包装在自己的模块概念中。当您需要特定组件时,将它们添加为模块,因为 Meson 将完成正确的事情
llvm_dep = dependency('llvm', version : '>= 4.0', modules : ['amdgpu'])
从 0.44.0 开始,它还可以接收可选模块(这些模块将影响为静态链接生成的论据)
llvm_dep = dependency(
'llvm', version : '>= 4.0', modules : ['amdgpu'], optional_modules : ['inteljitevents'],
)
使用 LLVM 工具
当使用 LLVM 作为库,但也需要其工具时,使用相同版本通常是有益的。这可以通过find_program()的version参数来部分实现。但是,发行版往往以截然不同的方式打包不同的 LLVM 版本。因此,通常最好直接使用 llvm 依赖项来检索工具
llvm_dep = dependency('llvm', version : ['>= 8', '< 9'])
llvm_link = find_program(llvm_dep.get_variable(configtool: 'bindir') / 'llvm-link')
MPI
(添加于 0.42.0)
MPI 支持 C、C++ 和 Fortran。由于依赖项是特定于语言的,因此您必须使用language关键字参数指定所需的语言,例如:
-
dependency('mpi', language: 'c')用于 C MPI 头文件和库 -
dependency('mpi', language: 'cpp')用于 C++ MPI 头文件和库 -
dependency('mpi', language: 'fortran')用于 Fortran MPI 头文件和库
Meson 优先使用 pkg-config 用于 MPI,但如果您的 MPI 实现未提供它们,它将搜索标准包装器可执行文件mpic、mpicxx、mpic++、mpifort、mpif90、mpif77。如果这些不在您的路径中,则可以在配置期间通过设置标准环境变量MPICC、MPICXX、MPIFC、MPIF90或MPIF77来指定它们。它还将尝试通过system方法使用 Windows 上的 Microsoft 实现。
method可以是auto、config-tool、pkg-config或system。
0.54.0 中新增 config-tool和system方法值。以前的版本始终尝试pkg-config,然后是config-tool,然后是system。
NetCDF
(添加于 0.50.0)
NetCDF 支持 C、C++ 和 Fortran。由于 NetCDF 依赖项是特定于语言的,因此您必须使用language关键字参数指定所需的语言,例如:
-
dependency('netcdf', language: 'c')用于 C NetCDF 头文件和库 -
dependency('netcdf', language: 'cpp')用于 C++ NetCDF 头文件和库 -
dependency('netcdf', language: 'fortran')用于 Fortran NetCDF 头文件和库
Meson 使用 pkg-config 来查找 NetCDF。
ObjFW
(添加于 1.5.0)
Meson 对 ObjFW 有原生支持,包括对 ObjFW 包的支持。
要使用 ObjFW,只需创建依赖项
objfw_dep = dependency('objfw')
要使用 ObjFW 包,只需将它们指定为模块
objfw_dep = dependency('objfw', modules: ['SomePackage'])
如果您需要有包和无包的依赖项,例如,因为您的测试想要使用 ObjFWTest,但您不想将应用程序链接到测试,只需获取两个依赖项并根据需要使用它们
objfw_dep = dependency('objfw', modules: ['SomePackage'])
objfwtest_dep = dependency('objfw', modules: ['ObjFWTest'])
然后将objfw_dep用于您的库,并将objfwtest_dep(而不是两者)用于您的测试。
OpenMP
(添加于 0.46.0)
此依赖项选择用于 OpenMP 支持的适当编译器标志和/或库。
可以使用language关键字。
OpenSSL
(添加于 0.62.0)
method可以是auto、pkg-config、system或cmake。
NumPy
(添加于 1.4.0)
method可以是auto、pkg-config或config-tool。dependency('numpy')支持 NumPy C API 的常规使用。numpy.f2py用于绑定 Fortran 代码尚未支持。
pcap
(添加于 0.42.0)
method可以是auto、config-tool或pkg-config。
Pybind11
(添加于 1.1.0)
method可以是auto、pkg-config、config-tool或cmake。
Python3
Python3 由 Meson 特殊处理
- Meson 尝试使用
pkg-config。 - 如果
pkg-config失败,Meson 将使用回退- 在 Windows 上,回退是当前的
python3解释器。 - 在 OSX 上,回退是从
/Library/Frameworks的框架依赖项。
- 在 Windows 上,回退是当前的
请注意,此依赖项找到的python3可能与python3模块中使用的不同,因为模块使用当前解释器,而依赖项首先尝试pkg-config。
method可以是auto、extraframework、pkg-config或sysconfig
Qt
Meson 有原生 Qt 支持。它的用法最好用一个例子来说明。
qt5_mod = import('qt5')
qt5widgets = dependency('qt5', modules : 'Widgets')
processed = qt5_mod.preprocess(
moc_headers : 'mainWindow.h', # Only headers that need moc should be put here
moc_sources : 'helperFile.cpp', # must have #include"moc_helperFile.cpp"
ui_files : 'mainWindow.ui',
qresources : 'resources.qrc',
)
q5exe = executable('qt5test',
sources : ['main.cpp',
'mainWindow.cpp',
processed],
dependencies: qt5widgets)
这里我们有一个用 Qt Designer 创建的 UI 文件,以及一个源文件和一个头文件,它们都需要用moc工具进行预处理。我们还定义了一个资源文件,要使用rcc进行编译。我们只需告诉 Meson 哪些文件是哪个文件,它将负责以正确的顺序调用所有必要的工具,这由qt5模块的preprocess方法完成。它的输出只是放在目标的源代码列表中。dependency的modules关键字的工作方式与 Boost 一样。它告诉程序使用了 Qt 的哪些子部分。
您可以将main关键字参数设置为true以使用 qtmain 静态库提供的WinMain()函数(此参数在 Windows 以外的平台上不起作用)。
将可选的private_headers关键字设置为 true 将将给定模块的私有头文件包含路径添加到编译器标志中。(自 v0.47.0 起)
注意在您的项目中使用私有头文件是一个坏主意,请自行承担风险。
method可以是auto、pkg-config或qmake。
SDL2
SDL2 可以使用pkg-config、sdl2-config配置工具、OSX 框架或cmake来定位。
method可以是auto、config-tool、extraframework、pkg-config或cmake。
Shaderc
(添加于 0.51.0)
Meson 将首先尝试使用pkg-config来查找 shaderc。上游目前提供三个不同的pkg-config文件,默认情况下将按以下顺序检查它们:shaderc、shaderc_combined和shaderc_static。如果static关键字参数为true,则 Meson 将按以下顺序检查:shaderc_combined、shaderc_static和shaderc。
如果找不到pkg-config文件,Meson 将尝试手动检测库。在这种情况下,它将尝试链接到-lshaderc_shared或-lshaderc_combined,如果 static 关键字参数为真,则优先使用后者。请注意,使用此方法无法获取 shaderc 版本。
method可以是auto、pkg-config或system。
线程
此依赖项选择适当的编译器标志和/或库以用于线程支持。
请参阅线程。
Valgrind
Meson 将使用pkg-config查找 valgrind,但仅使用编译标志并避免尝试链接其非 PIC 静态库。
Vulkan
(添加于 0.42.0)
可以使用pkg-config或VULKAN_SDK环境变量定位 Vulkan。
method可以是auto、pkg-config或system。
WxWidgets
与Boost类似,WxWidgets 不是单个库,而是一组模块。WxWidgets 通过wx-config支持。Meson 将modules替换为wx-config调用,它生成
-
compile_args使用wx-config --cxxflags $modules... -
link_args使用wx-config --libs $modules...
示例
wx_dep = dependency(
'wxwidgets', version : '>=3.0.0', modules : ['std', 'stc'],
)
# compile_args:
$ wx-config --cxxflags std stc
# link_args:
$ wx-config --libs std stc
Zlib
Zlib 附带 pkg-config 和 cmake 支持,但在某些操作系统(Windows、macOS、FreeBSD、dragonflybsd、Android)上,它作为基本操作系统的一部分提供,没有 pkg-config 支持。新的系统查找器可以在这些操作系统上用于链接到捆绑版本。
method可以是auto、pkg-config、cmake或system。
0.54.0 中的新增功能system方法。
DIA SDK
(新增于 1.6.0)
Microsoft 的调试接口访问 SDK (DIA SDK) 仅在 Windows 上可用,在使用来自 Microsoft Visual Studio 的 msvc、clang-cl 或 clang 编译器时。
DIA SDK 运行时不会静态链接到目标。默认使用方式需要使用regsrv32.exe命令在操作系统中手动注册运行时 DLL(msdiaXXX.dll),以便可以使用CoCreateInstance Windows 函数加载它。
或者,您可以使用 meson 将 DIA 运行时 DLL 复制到您的构建目录,并使用 DIA SDK 提供的NoRegCoCreate函数动态加载它。为了便于操作,您可以从依赖项的变量“dll”中读取 DLL 路径,并使用 fs 模块将其复制。示例
dia = dependency('diasdk', required: true)
fs = import('fs')
fs.copyfile(dia.get_variable('dll'))
conf = configuration_data()
conf.set('msdia_dll_name', fs.name(dia_dll_name))
仅提供主要版本(例如,版本对于 msdia140.dll 为14)。
1:如果底层文件系统恰好区分大小写,则它们可能看起来不区分大小写。
搜索结果为