編譯 D 應用程式
Meson 支援編譯 D 程式。一個最小的 D meson.build
檔案看起來像這樣
project('myapp', 'd')
executable('myapp', 'app.d')
條件編譯
如果您使用 version() 功能進行條件編譯,您可以使用 d_module_versions
目標屬性來使用它
project('myapp', 'd')
executable('myapp', 'app.d', d_module_versions: ['Demo', 'FeatureA'])
為了進行除錯,debug() 條件會在除錯建置中自動編譯,並且可以使用 d_debug
參數加入額外的識別符
project('myapp', 'd')
executable('myapp', 'app.d', d_debug: [3, 'DebugFeatureA'])
在 declare_dependency
中
自 0.62.0 版本起,當使用 declare_dependency
宣告您自己的相依性時,可以為 D 特定的功能加入參數,例如傳播條件編譯版本
my_dep = declare_dependency(
# ...
d_module_versions: ['LUA_53'],
d_import_dirs: include_directories('my_lua_folder'),
)
接受的 D 特定參數為 d_module_versions
和 d_import_dirs
(DMD 的 -J
開關)。
使用嵌入式單元測試
如果您使用嵌入式 unittest 函式,您的原始碼需要編譯兩次,一次為常規模式,另一次則啟用單元測試。這是透過將 d_unittest
目標屬性設定為 true
來完成的。 Meson 只會傳遞各自編譯器的 -unittest
標誌,而絕不會讓編譯器產生空的 main 函式。如果需要以可移植的方式使用該功能,請自行建立一個空的 main()
函式來進行單元測試,因為 GNU D 編譯器不具有此功能。
這是一個在 Meson 中使用 D 單元測試的範例
project('myapp_tested', 'd')
myapp_src = ['app.d', 'alpha.d', 'beta.d']
executable('myapp', myapp_src)
test_exe = executable('myapp_test', myapp_src, d_unittest: true)
test('myapptest', test_exe)
編譯 D 函式庫並安裝它們
建置 D 函式庫是一個直接的過程,與在 Meson 中建置 C 函式庫的方式沒有不同。您應該產生一個 pkg-config 檔案並安裝它,以便系統上的其他軟體在安裝後可以找到該相依性。
這是一個如何建置 D 共享函式庫的範例
project('mylib', 'd', version: '1.2.0')
project_soversion = 0
glib_dep = dependency('glib-2.0')
my_lib = library('mylib',
['src/mylib/libfunctions.d'],
dependencies: [glib_dep],
install: true,
version: meson.project_version(),
soversion: project_soversion,
d_module_versions: ['FeatureA', 'featureB', 1]
)
pkgc = import('pkgconfig')
pkgc.generate(name: 'mylib',
libraries: my_lib,
subdirs: 'd/mylib',
version: meson.project_version(),
description: 'A simple example D library.',
d_module_versions: ['FeatureA', 1]
)
install_subdir('src/mylib/', install_dir: 'include/d/mylib/')
重要的是要讓 D 原始碼安裝在包含路徑的子目錄中,在本例中為 /usr/include/d/mylib/mylib
。所有 D 編譯器預設都會包含 /usr/include/d
目錄,如果您的函式庫安裝到 /usr/include/d/mylib
中,當您在安裝它的機器上再次編譯您的專案時,編譯器很有可能會優先選擇舊的已安裝 include,而不是原始碼樹中的新版本,從而導致非常令人困惑的錯誤。
這是一個如何在應用程式中使用我們剛建置和安裝的 D 函式庫的範例
project('myapp', 'd')
mylib_dep = dependency('mylib', version: '>= 1.2.0')
myapp_src = ['app.d', 'alpha.d', 'beta.d']
executable('myapp', myapp_src, dependencies: [mylib_dep])
請記住,函式庫和可執行檔都需要使用完全相同的 D 編譯器和 D 編譯器版本進行建置。 D ABI 在不同的編譯器及其版本之間是不穩定的,混合使用編譯器會導致問題。
與 DUB 整合
DUB 是一個完全整合的 D 建置系統,但它也是提供相依性的一種方式。從 D 套件註冊表 中添加相依性非常簡單。您可以在 相依性 中找到如何執行此操作的方法。您也可以如 Dlang 中所解釋的,自動產生一個 dub.json
檔案。
搜尋結果為