相依性

很少有應用程式是完全獨立的,它們通常會使用外部函式庫和框架來完成工作。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-configconfig-toolcmakebuiltinsystemsysconfigqmakeextraframeworkdub

cups_dep = dependency('cups', method : 'pkg-config')

對於沒有特定偵測邏輯的相依性,auto 的相依性方法順序為

  1. pkg-config
  2. cmake
  3. extraframework (僅限 OSX)

系統

有些相依性沒有有效的探索方法,或者只在某些情況下有。一些範例包括 Zlib,它同時提供 pkg-config 和 cmake,除非它是基礎作業系統映像檔的一部分(例如在 FreeBSD 和 macOS 中);OpenGL 在來自 glvnd 或 mesa 的 Unices 上具有 pkg-config,但在 macOS 和 Windows 上沒有 pkg-config。

在這些情況下,Meson 會以 system 相依性的形式提供方便的包裝函式。在內部,這些相依性所做的與使用者在建置系統 DSL 中或使用指令碼所做的事情完全相同,可能會呼叫 compiler.find_library(),設定 link_withinclude_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 kwarg(在 0.54.0 中引入)提供對為 CMake find_package 查找新增其他 COMPONENTS 的支援。所有指定的組件都會直接傳遞給 find_package(COMPONENTS)

使用 cmake_package_version kwarg(在 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

組態工具

CUPSLLVMObjFWpcapWxWidgetslibwmfGCryptGPGME 和 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_INCLUDEDIRBOOST_LIBRARYDIR 環境變數。(在 0.56.0 中新增)您也可以在您的 native 或 cross machine 檔案中將這些參數設定為 boost_rootboost_includedirboost_librarydir。請注意,機器檔案變數優先於環境變數,並且指定任何這些變數都會停用系統範圍的 Boost 搜尋。

您可以將參數 threading 設定為 single,以使用已編譯為單執行緒使用的 Boost 函式庫。

CUDA

(新增於 0.53.0)

啟用編譯和連結 CUDA 工具組。可以傳遞 versionmodules 關鍵字,以要求使用特定的 CUDA 工具組版本和/或額外的 CUDA 函式庫。

dep = dependency('cuda', version : '>=10', modules : ['cublas'])

請注意,只有當您從 C/C++ 檔案或專案中使用 CUDA 工具組,或者您正在使用需要明確連結的額外工具組函式庫時,才需要明確加入此依賴項。如果無法在您系統上的預設路徑中找到 CUDA 工具組,您可以使用 CUDA_PATH 明確設定路徑。

CUPS

method 可以是 autoconfig-toolpkg-configcmakeextraframework

Curses

(自 0.54.0 起)

Curses(和 ncurses)是一個跨平台的麻煩。Meson 將這些依賴項包裝在 curses 依賴項中。這涵蓋了 ncurses(首選)和其他 curses 實作。

method 可以是 autopkg-configconfig-toolsystem

0.56.0 中的新功能 config-toolsystem 方法。

定義在 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 可以是 autobuiltinsystem

Fortran Coarrays

(新增於 0.50.0)

Coarrays 是 Fortran 語言的內建功能,透過 dependency('coarray') 啟用。

如果存在 OpenCoarrays,GCC 將使用它來實作 coarrays,而 Intel 和 NAG 則使用內部 coarray 支援。

GPGME

(新增於 0.51.0)

method 可以是 autoconfig-toolpkg-config

GL

這會以適合平台的方式尋找 OpenGL 函式庫。

method 可以是 autopkg-configsystem

GTest 和 GMock

GTest 和 GMock 以原始碼的形式提供,必須作為專案的一部分進行編譯。使用 Meson,您不必關心細節,只需將 gtestgmock 傳遞給 dependency,它就會為您完成一切。如果您想使用 GMock,建議同時使用 GTest,因為使其獨立運作會很棘手。

您可以將 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 可以是 autoconfig-toolpkg-config

0.56.0 中的新功能 config-tool 方法。0.56.0 中的新功能 依賴項現在會回傳正確的依賴項類型,並且 get_variable 和類似方法應該會如預期般運作。

iconv

(新增於 0.60.0)

提供對 iconv 系列 C 函式的存取。在未內建於 libc 的系統上,會嘗試尋找提供這些函式的外部函式庫。

method 可以是 autobuiltinsystem

intl

(新增於 0.59.0)

提供對 *gettext 系列 C 函式的存取。在未內建於 libc 的系統上,會嘗試尋找提供這些函式的外部函式庫。

method 可以是 autobuiltinsystem

JDK

新增於 0.58.0) (已於 0.62.0 中棄用

JNI 的已棄用名稱。使用 dependency('jdk') 而不是 dependency('jni')

JNI

(新增於 0.62.0)

modules 是一個可選的字串清單,其中包含 jvmawt

提供使用 Java Native Interface (JNI) 編譯的存取權。查詢會先檢查環境中是否設定了 JAVA_HOME,如果沒有,則會使用 javac 的已解析路徑。系統通常會將您偏好的 JDK 連結到眾所周知的路徑,例如 Linux 上的 /usr/bin/javac。使用 JAVA_HOME 或已解析的 javac 的路徑,此依賴項會將 JDK 安裝的 include 目錄及其平台相關的子目錄放在編譯器的 include 路徑上。如果 modules 為非空,則也會加入正確的連結器參數。

dep = dependency('jni', version: '>= 1.8.0', modules: ['jvm'])

注意:由於使用了已解析的路徑,升級 JDK 可能會導致找不到各種路徑。在這種情況下,請重新設定組建目錄。一種解決方法是明確設定 JAVA_HOME,而不是依賴備用 javac 已解析路徑行為。

注意:在 linuxwindowsdarwinsunos 以外的平台上,include 路徑可能會損壞。在這種情況下,請提交 PR 或開啟 issue。

注意:如果您的系統不是 x86_64,在 JDK <= 1.8 上使用 modules 參數可能會損壞。在這種情況下,請提交 PR 或開啟 issue。

libgcrypt

(新增於 0.49.0)

method 可以是 autoconfig-toolpkg-config

libwmf

(新增於 0.44.0)

method 可以是 autoconfig-toolpkg-config

LLVM

Meson 自 LLVM 3.5 版起就原生支援 LLVM。與其他基於 config-tool 的依賴項相比,它支援一些額外的功能。

從 0.44.0 開始,Meson 支援 LLVM 的 static 關鍵字參數。在此之前,由於 llvm-config 的怪癖,LLVM >= 3.9 會始終動態連結,而較舊的版本會靜態連結。

method 可以是 autoconfig-toolcmake

模組,又名組件

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 實作未提供,它將會搜尋標準的包裝執行檔 mpicmpicxxmpic++mpifortmpif90mpif77。如果這些不在您的路徑中,可以在設定期間設定標準的環境變數 MPICCMPICXXMPIFCMPIF90MPIF77 來指定它們。它也會嘗試透過 system 方法在 Windows 上使用 Microsoft 的實作。

method 可以是 autoconfig-toolpkg-configsystem

0.54.0 中的新功能 config-toolsystem 方法值。先前的版本會始終嘗試 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 可以是 autopkg-configsystemcmake

NumPy

(新增於 1.4.0)

method 可以是 autopkg-configconfig-tooldependency('numpy') 支援 NumPy C API 的常規使用。尚不支援使用 numpy.f2py 進行 Fortran 程式碼繫結。

pcap

(新增於 0.42.0)

method 可以是 autoconfig-toolpkg-config

Pybind11

(新增於 1.1.0)

method 可以是 autopkg-configconfig-toolcmake

Python3

Meson 會特殊處理 Python3

  1. Meson 嘗試使用 pkg-config
  2. 如果 pkg-config 失敗,Meson 會使用備用方案
    • 在 Windows 上,備用方案是目前的 python3 解譯器。
    • 在 OSX 上,回溯機制是來自 /Library/Frameworks 的框架相依性。

請注意,此相依性找到的 python3 可能與 python3 模組中使用的不同,因為模組使用目前的直譯器,但相依性會先嘗試 pkg-config

method 可以是 autoextraframeworkpkg-configsysconfig

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 方法完成的。它的輸出會直接放入目標的原始檔清單中。dependencymodules 關鍵字的工作方式與 Boost 相同。它會告訴程式使用 Qt 的哪些子部分。

您可以將 main 關鍵字引數設定為 true,以使用 qtmain 靜態程式庫提供的 WinMain() 函數 (此引數在 Windows 以外的平台上不會執行任何操作)。

將可選的 private_headers 關鍵字設定為 true,會將給定模組的私有標頭包含路徑加入編譯器旗標中。(自 v0.47.0 起)

注意 在專案中使用私有標頭不是好主意,這樣做風險自負。

method 可以是 autopkg-configqmake

SDL2

可以使用 pkg-configsdl2-config 設定工具、OSX 框架或 cmake 來找到 SDL2。

method 可以是 autoconfig-toolextraframeworkpkg-configcmake

Shaderc

(新增於 0.51.0)

Meson 會先嘗試使用 pkg-config 尋找 shaderc。Upstream 目前提供三個不同的 pkg-config 檔案,預設會按照這個順序檢查它們:shadercshaderc_combinedshaderc_static。如果 static 關鍵字引數為 true,則 Meson 會改為按照這個順序檢查:shaderc_combinedshaderc_staticshaderc

如果找不到 pkg-config 檔案,則 Meson 會嘗試手動偵測程式庫。在這種情況下,它會嘗試連結 -lshaderc_shared-lshaderc_combined,如果靜態關鍵字引數為 true,則會優先選擇後者。請注意,使用此方法無法取得 shaderc 版本。

method 可以是 autopkg-configsystem

Threads

此相依性會選取適當的編譯器旗標和/或程式庫,以用於執行緒支援。

請參閱 threads

Valgrind

Meson 會使用 pkg-config 找到 valgrind,但只會使用編譯旗標,並避免嘗試連結其非 PIC 靜態程式庫。

Vulkan

(新增於 0.42.0)

可以使用 pkg-configVULKAN_SDK 環境變數來找到 Vulkan。

method 可以是 autopkg-configsystem

WxWidgets

類似於 Boost,WxWidgets 不是單一程式庫,而是一組模組。WxWidgets 透過 wx-config 支援。Meson 會將 modules 替換為 wx-config 調用,它會產生

  • 使用 wx-config --cxxflags $modules...compile_args
  • 使用 wx-config --libs $modules...link_args

範例

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 可以是 autopkg-configcmakesystem

0.54.0 版新增 system 方法。

DIA SDK

(新增於 1.6.0)

Microsoft 的 Debug Interface Access SDK (DIA SDK) 僅在 Windows 上,當使用 msvc、clang-cl 或來自 Microsoft Visual Studio 的 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:如果底層檔案系統剛好不區分大小寫,它們可能會顯示為不區分大小寫。

搜尋結果為