外部工具
外部工具
Cargo 的目標(biāo)之一是與第三方工具(如 IDE 和其他構(gòu)建系統(tǒng))的簡(jiǎn)單集成。為了簡(jiǎn)化集成,Cargo 有幾個(gè)設(shè)施:
一個(gè)
cargo metadata
命令,以 JSON 格式輸出包結(jié)構(gòu)和依賴關(guān)系信息,一個(gè)
--message-format
標(biāo)志,輸出有關(guān)特定構(gòu)建的信息,以及支持自定義子命令.
關(guān)于包結(jié)構(gòu)的信息
包結(jié)構(gòu)的資料
您可以使用cargo metadata
命令,以獲取有關(guān)包結(jié)構(gòu)和依賴關(guān)系的信息。命令的輸出如下所示:
{
// Integer 版本格式數(shù)字.
"version": integer,
// 工作區(qū)包的列表, 包括 依賴項(xiàng).
"packages": [
{
// 包 識(shí)別id 隊(duì)列.
"id": PackageId,
"name": string,
"version": string,
"source": SourceId,
// 確認(rèn)依賴的一個(gè)列表, 可看 `resolve` 字段中的真實(shí)依賴.
"dependencies": [ Dependency ],
"targets: [ Target ],
// Cargo.toml 路徑
"manifest_path": string,
}
],
"workspace_members": [ PackageId ],
// 依賴 關(guān)系圖.
"resolve": {
"nodes": [
{
"id": PackageId,
"dependencies": [ PackageId ]
}
]
}
}
格式穩(wěn)定且有版本化。調(diào)用cargo metadata
時(shí),你應(yīng)該通過--format-version
明確標(biāo)記,以避免向前不兼容的危險(xiǎn)。
如果你正在使用 Rust,這有個(gè)cargo_metadata箱.
構(gòu)建信息
關(guān)于構(gòu)建的資料
傳遞--message-format=json
給,Cargo, 將在構(gòu)建期間輸出以下信息:
編譯器錯(cuò)誤和警告,
制作的工件,
構(gòu)建腳本的結(jié)果(例如,本機(jī)依賴項(xiàng)).
輸出以每行格式的 JSON 對(duì)象轉(zhuǎn)到 stdout。reason
字段區(qū)分不同類型的消息.
有關(guān) Makefile 兼容格式的依賴關(guān)系的信息存儲(chǔ)在工件旁的.d
文件中。
自定義子命令
自定義的子命令
Cargo 設(shè)計(jì)為,可以使用新的子命令進(jìn)行擴(kuò)展,而無(wú)需修改 Cargo 本身。這是通過轉(zhuǎn)化一個(gè) cargo (?<command>[^ ]+)
的命令調(diào)用,變化為調(diào)用外部工具cargo-${command}
來實(shí)現(xiàn)的。外部工具必須存在于用戶其中一個(gè)$PATH
目錄中.
當(dāng) Cargo 調(diào)用自定義子命令時(shí),子命令的第一個(gè)參數(shù)將像往常一樣是自定義子命令的文件名。第二個(gè)參數(shù)將是子命令名稱本身。例如,在調(diào)用cargo-${command}
時(shí),第二個(gè)參數(shù)是${command}
。命令行上的其他所有參數(shù)將保持不變.
Cargo 還可以用cargo help ${command}
顯示自定義子命令的幫助輸出。Cargo 假定子命令將在第三個(gè)參數(shù)出現(xiàn)時(shí),打印幫助消息--help
.所以,cargo help ${command}
會(huì)調(diào)用cargo-${command} ${command} --help
.
自定義子命令可以使用CARGO
環(huán)境變量回調(diào) Cargo。或者,它可以鏈接到作為一個(gè)庫(kù)的cargo
箱,但這種方法有缺點(diǎn):
Cargo 作為庫(kù)是不穩(wěn)定的:API 可能會(huì)更改,但不會(huì)棄用
鏈接的 Cargo 庫(kù)的版本可能與 Cargo 二進(jìn)制文件不同
更多建議: