相依性
很少有應用程式是完全獨立的,它們通常會使用外部函式庫和框架來完成工作。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-config
cmake
-
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_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
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
組態工具
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 中新增)您也可以在您的 native 或 cross machine 檔案中將這些參數設定為 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 Coarrays
(新增於 0.50.0)
Coarrays 是 Fortran 語言的內建功能,透過 dependency('coarray')
啟用。
如果存在 OpenCoarrays,GCC 將使用它來實作 coarrays,而 Intel 和 NAG 則使用內部 coarray 支援。
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,因為使其獨立運作會很棘手。
您可以將 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
目錄及其平台相關的子目錄放在編譯器的 include 路徑上。如果 modules
為非空,則也會加入正確的連結器參數。
dep = dependency('jni', version: '>= 1.8.0', modules: ['jvm'])
注意:由於使用了已解析的路徑,升級 JDK 可能會導致找不到各種路徑。在這種情況下,請重新設定組建目錄。一種解決方法是明確設定 JAVA_HOME
,而不是依賴備用 javac
已解析路徑行為。
注意:在 linux
、windows
、darwin
和 sunos
以外的平台上,include 路徑可能會損壞。在這種情況下,請提交 PR 或開啟 issue。
注意:如果您的系統不是 x86_64
,在 JDK <= 1.8
上使用 modules
參數可能會損壞。在這種情況下,請提交 PR 或開啟 issue。
libgcrypt
(新增於 0.49.0)
method
可以是 auto
、config-tool
或 pkg-config
。
libwmf
(新增於 0.44.0)
method
可以是 auto
、config-tool
或 pkg-config
。
LLVM
Meson 自 LLVM 3.5 版起就原生支援 LLVM。與其他基於 config-tool 的依賴項相比,它支援一些額外的功能。
從 0.44.0 開始,Meson 支援 LLVM 的 static
關鍵字參數。在此之前,由於 llvm-config
的怪癖,LLVM >= 3.9 會始終動態連結,而較舊的版本會靜態連結。
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
Meson 會特殊處理 Python3
- 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
可以使用 pkg-config
、sdl2-config
設定工具、OSX 框架或 cmake
來找到 SDL2。
method
可以是 auto
、config-tool
、extraframework
、pkg-config
或 cmake
。
Shaderc
(新增於 0.51.0)
Meson 會先嘗試使用 pkg-config
尋找 shaderc。Upstream 目前提供三個不同的 pkg-config
檔案,預設會按照這個順序檢查它們:shaderc
、shaderc_combined
和 shaderc_static
。如果 static
關鍵字引數為 true
,則 Meson 會改為按照這個順序檢查:shaderc_combined
、shaderc_static
和 shaderc
。
如果找不到 pkg-config
檔案,則 Meson 會嘗試手動偵測程式庫。在這種情況下,它會嘗試連結 -lshaderc_shared
或 -lshaderc_combined
,如果靜態關鍵字引數為 true,則會優先選擇後者。請注意,使用此方法無法取得 shaderc 版本。
method
可以是 auto
、pkg-config
或 system
。
Threads
此相依性會選取適當的編譯器旗標和/或程式庫,以用於執行緒支援。
請參閱 threads。
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
調用,它會產生
-
使用
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
可以是 auto
、pkg-config
、cmake
或 system
。
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:如果底層檔案系統剛好不區分大小寫,它們可能會顯示為不區分大小寫。
搜尋結果為