cmake-file-api(7)¶
簡介¶
CMake 提供基於檔案的 API,客戶端可以使用它來獲取有關 CMake 生成的建置系統的語義資訊。客戶端可以通過將查詢檔案寫入建置樹中的特定位置來使用 API,以請求零個或多個 物件種類。當 CMake 在該建置樹中生成建置系統時,它將讀取查詢檔案並寫入回覆檔案以供客戶端讀取。
基於檔案的 API 在建置樹的頂部使用 <build>/.cmake/api/
目錄。API 會進行版本控制,以支援 API 目錄中檔案佈局的更改。API 檔案佈局的版本控制與回覆中使用的 物件種類 的版本控制是正交的。此版本的 CMake 僅支援一個 API 版本,即 API v1。
加入版本 3.27: 專案也可以使用 cmake_file_api()
命令提交目前執行的查詢。
API v1¶
API v1 位於 <build>/.cmake/api/v1/
目錄中。它具有以下子目錄
query/
保存客戶端寫入的查詢檔案。這些檔案可能是 v1 共用無狀態查詢檔案、v1 客戶端無狀態查詢檔案 或 v1 客戶端有狀態查詢檔案。
reply/
保存 CMake 在每次執行以生成建置系統時寫入的回覆檔案。這些檔案會透過一個 v1 回覆索引檔案 進行索引,該檔案可能會參考其他 v1 回覆檔案。CMake 擁有所有回覆檔案。客戶端絕不能刪除它們。
客戶端可以隨時尋找並讀取回覆索引檔案。客戶端可以選擇隨時建立
reply/
目錄,並監控是否有新的回覆索引檔案出現。
加入版本 3.31: 使用者可以在 CMAKE_CONFIG_DIR
內的 api/v1/query
中新增查詢檔案,以建立所有 CMake 專案的使用者範圍查詢。
v1 客戶端無狀態查詢檔案¶
客戶端無狀態查詢檔案允許客戶端為 物件種類 的主要版本建立擁有的請求,並取得執行的 CMake 所識別的所有請求版本。
客戶端可以透過在客戶端特定查詢子目錄中建立空白檔案來建立擁有的請求。其形式為
<build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
其中 client-
是字面量,<client>
是唯一識別客戶端的字串,<kind>
是 物件種類 之一,-v
是字面量,而 <major>
是主要版本號。每個客戶端都必須透過自己的方式選擇唯一的 <client>
識別碼。
這種形式的檔案是客戶端 <client>
擁有的無狀態查詢。擁有者客戶端可以隨時移除它們。
v1 客戶端有狀態查詢檔案¶
有狀態查詢檔案允許客戶端請求每個 物件種類 的版本清單,並且只取得執行的 CMake 所識別的最新版本。
客戶端可以透過在客戶端特定查詢子目錄中建立 query.json
檔案來建立擁有的有狀態查詢。其形式為
<build>/.cmake/api/v1/query/client-<client>/query.json
其中 client-
是字面量,<client>
是唯一識別客戶端的字串,而 query.json
是字面量。每個客戶端都必須透過自己的方式選擇唯一的 <client>
識別碼。
query.json
檔案是客戶端 <client>
擁有的有狀態查詢。擁有者客戶端可以隨時更新或移除它們。當更新給定的客戶端安裝時,它可以接著更新它寫入建置樹的有狀態查詢,以請求更新的物件版本。這可以用來避免不必要地要求 CMake 生成多個物件版本。
query.json
檔案必須包含一個 JSON 物件
{
"requests": [
{ "kind": "<kind>" , "version": 1 },
{ "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
{ "kind": "<kind>" , "version": [2, 1] },
{ "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
{ "kind": "<kind>" , "version": 1, "client": {} },
{ "kind": "..." }
],
"client": {}
}
成員如下:
requests
一個包含零個或多個請求的 JSON 陣列。每個請求都是一個 JSON 物件,其成員如下:
kind
指定要包含在回覆中的 物件種類 之一。
version
指出客戶端理解的物件種類版本。版本遵循語義版本慣例,具有主要和次要元件。值必須是
一個指定 (非負) 主要版本號的 JSON 整數,或
一個包含
major
和 (可選)minor
成員的 JSON 物件,這些成員指定非負整數版本元件,或一個 JSON 陣列,其元素是上述的其中一個。
client
保留給客戶端使用的可選成員。此值會保留在 v1 回覆索引檔案 中為客戶端寫入的回覆中,但會被忽略。客戶端可以使用此值將自訂資訊連同請求一起傳遞到其回覆中。
對於每個請求的物件種類,CMake 將從請求中列出的版本中選擇它識別的第一個版本。回應將使用選定的主要版本,以及該主要版本的執行 CMake 已知的最高次要版本。因此,客戶端應依偏好的順序列出所有支援的主要版本,以及每個主要版本所需的最低次要版本。
client
保留給客戶端使用的可選成員。此值會保留在 v1 回覆索引檔案 中為客戶端寫入的回覆中,但會被忽略。客戶端可以使用此值將自訂資訊連同查詢一起傳遞到其回覆中。
其他 query.json
頂層成員保留供未來使用。如果存在,為了向前相容性,它們會被忽略。
v1 回覆索引檔案¶
CMake 在每次執行以生成建置系統時,都會將 index-*.json
檔案寫入 v1/reply/
目錄。客戶端必須先讀取回覆索引檔案,並且只能透過追蹤參考來讀取其他 v1 回覆檔案。回覆索引檔案名稱的形式為
<build>/.cmake/api/v1/reply/index-<unspecified>.json
其中 index-
是字面值,而 <unspecified>
是 CMake 選擇的未指定名稱。每當產生新的索引檔案時,都會給它一個新名稱,並刪除任何舊的索引檔案。在這些步驟之間的短暫時間內,可能會存在多個索引檔案;依字典順序名稱最大的那個是目前的索引檔案。
回覆索引檔案包含一個 JSON 物件
{
"cmake": {
"version": {
"major": 3, "minor": 14, "patch": 0, "suffix": "",
"string": "3.14.0", "isDirty": false
},
"paths": {
"cmake": "/prefix/bin/cmake",
"ctest": "/prefix/bin/ctest",
"cpack": "/prefix/bin/cpack",
"root": "/prefix/share/cmake-3.14"
},
"generator": {
"multiConfig": false,
"name": "Unix Makefiles"
}
},
"objects": [
{ "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
{ "...": "..." }
],
"reply": {
"<kind>-v<major>": { "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
"<unknown>": { "error": "unknown query file" },
"...": {},
"client-<client>": {
"<kind>-v<major>": { "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
"<unknown>": { "error": "unknown query file" },
"...": {},
"query.json": {
"requests": [ {}, {}, {} ],
"responses": [
{ "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
{ "error": "unknown query file" },
{ "...": {} }
],
"client": {}
}
}
}
}
成員如下:
cmake
一個 JSON 物件,包含關於產生回覆的 CMake 實例的資訊。它包含以下成員:
version
一個 JSON 物件,指定 CMake 的版本,包含以下成員:
major
、minor
、patch
整數值,指定主版本、次版本和修補程式版本元件。
suffix
一個字串,指定版本字尾(如果有的話),例如
g0abc3
。string
一個字串,指定完整版本,格式為
<major>.<minor>.<patch>[-<suffix>]
。isDirty
一個布林值,指示版本是否從具有本機修改的版本控制原始碼樹建置。
paths
一個 JSON 物件,指定 CMake 隨附項目的路徑。它有 cmake、ctest 和 cpack 的成員,它們的值是 JSON 字串,指定每個工具的絕對路徑,以正斜線表示。它還有一個
root
成員,用於表示包含 CMake 資源(如Modules/
目錄)的目錄的絕對路徑(請參閱CMAKE_ROOT
)。generator
一個 JSON 物件,描述用於建置的 CMake 產生器。它具有以下成員:
multiConfig
一個布林值,指定產生器是否支援多個輸出組態。
name
一個字串,指定產生器的名稱。
platform
如果產生器支援
CMAKE_GENERATOR_PLATFORM
,則這是一個字串,指定產生器平台名稱。
objects
reply
一個 JSON 物件,鏡像 CMake 載入以產生回覆的
query/
目錄的內容。成員的形式為<kind>-v<major>
對於 CMake 識別為請求物件種類
<kind>
且主版本為<major>
的每個v1 共用無狀態查詢檔案,都會出現這種形式的成員。值是 v1 回覆檔案參照,指向該物件種類和版本的對應回覆檔案。<unknown>
對於 CMake 未識別的每個v1 共用無狀態查詢檔案,都會出現這種形式的成員。該值是一個 JSON 物件,其中包含單個
error
成員,其中包含一個錯誤訊息字串,指示查詢檔案未知。client-<client>
對於每個保留 v1 用戶端無狀態查詢檔案的用戶端擁有目錄,都會出現這種形式的成員。該值是一個 JSON 物件,鏡像
query/client-<client>/
目錄的內容。成員的形式為<kind>-v<major>
對於 CMake 識別為請求物件種類
<kind>
且主版本為<major>
的每個v1 用戶端無狀態查詢檔案,都會出現這種形式的成員。值是 v1 回覆檔案參照,指向該物件種類和版本的對應回覆檔案。<unknown>
對於 CMake 未識別的每個v1 用戶端無狀態查詢檔案,都會出現這種形式的成員。該值是一個 JSON 物件,其中包含單個
error
成員,其中包含一個錯誤訊息字串,指示查詢檔案未知。query.json
當用戶端使用 v1 用戶端有狀態查詢檔案時,會出現此成員。如果
query.json
檔案無法讀取或剖析為 JSON 物件,則此成員是一個 JSON 物件,其中包含單個error
成員,其中包含一個錯誤訊息字串。否則,此成員是一個 JSON 物件,鏡像query.json
檔案的內容。成員如下:client
如果存在,則為
query.json
檔案client
成員的副本。requests
如果存在,則為
query.json
檔案requests
成員的副本。responses
如果
query.json
檔案的requests
成員遺失或無效,則此成員是一個 JSON 物件,其中包含單個error
成員,其中包含一個錯誤訊息字串。否則,此成員包含一個 JSON 陣列,其中包含requests
陣列的每個項目的回應,順序相同。每個回應是一個 JSON 物件,其中包含單個
error
成員,其中包含一個錯誤訊息字串,或一個 v1 回覆檔案參照,指向所請求的物件種類和所選版本的對應回覆檔案。
讀取回覆索引檔案後,用戶端可以讀取它參照的其他v1 回覆檔案。
v1 回覆檔案參照¶
回覆索引檔案使用具有以下成員的 JSON 物件來表示對另一個回覆檔案的每個參照:
kind
一個字串,指定物件種類之一。
version
一個 JSON 物件,具有
major
和minor
成員,指定物件種類的整數版本元件。jsonFile
一個 JSON 字串,指定相對於回覆索引檔案的另一個 JSON 檔案的路徑,其中包含物件。
v1 回覆檔案¶
包含特定物件種類的回覆檔案由 CMake 寫入。這些檔案的名稱未指定,用戶端不得解譯。用戶端必須先讀取 v1 回覆索引檔案,並追蹤對所需回應物件名稱的參照。
回覆檔案(包括索引檔案)絕不會被名稱相同但內容不同的檔案取代。這允許用戶端與可能產生新回覆的執行中的 CMake 同時讀取檔案。但是,產生新回覆後,CMake 會嘗試從它剛才沒有寫入的先前執行中移除回覆檔案。如果用戶端嘗試讀取索引參照的回覆檔案,但發現該檔案遺失,則表示同時執行的 CMake 已產生新的回覆。用戶端可以透過讀取新的回覆索引檔案重新開始。
物件種類¶
CMake 基於檔案的 API 使用以下幾種 JSON 物件報告關於建置系統的語意資訊。每種物件種類都使用具有主元件和次元件的語意版本控制進行獨立版本控制。每種物件種類都具有以下形式:
{
"kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"...": {}
}
kind
成員是一個字串,指定物件種類名稱。version
成員是一個 JSON 物件,具有 major
和 minor
成員,指定物件種類版本的整數元件。其他頂層成員特定於每種物件種類。
物件種類「codemodel」¶
codemodel
物件種類描述 CMake 建模的建置系統結構。
只有一個 codemodel
物件主版本,版本 2。版本 1 不存在,以避免與來自 cmake-server(7)
模式的內容混淆。
「codemodel」版本 2¶
codemodel
物件版本 2 是一個 JSON 物件
{
"kind": "codemodel",
"version": { "major": 2, "minor": 7 },
"paths": {
"source": "/path/to/top-level-source-dir",
"build": "/path/to/top-level-build-dir"
},
"configurations": [
{
"name": "Debug",
"directories": [
{
"source": ".",
"build": ".",
"childIndexes": [ 1 ],
"projectIndex": 0,
"targetIndexes": [ 0 ],
"hasInstallRule": true,
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
},
{
"source": "sub",
"build": "sub",
"parentIndex": 0,
"projectIndex": 0,
"targetIndexes": [ 1 ],
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
}
],
"projects": [
{
"name": "MyProject",
"directoryIndexes": [ 0, 1 ],
"targetIndexes": [ 0, 1 ]
}
],
"targets": [
{
"name": "MyExecutable",
"directoryIndex": 0,
"projectIndex": 0,
"jsonFile": "<file>"
},
{
"name": "MyLibrary",
"directoryIndex": 1,
"projectIndex": 0,
"jsonFile": "<file>"
}
]
}
]
}
特定於 codemodel
物件的成員是
paths
一個 JSON 物件,包含以下成員:
source
一個字串,指定頂層原始碼目錄的絕對路徑,以正斜線表示。
build
一個字串,指定頂層建置目錄的絕對路徑,以正斜線表示。
configurations
一個 JSON 陣列,其中包含與可用建置組態對應的項目。在單一組態產生器上,有一個項目用於
CMAKE_BUILD_TYPE
變數的值。對於多組態產生器,CMAKE_CONFIGURATION_TYPES
變數中列出的每個組態都有一個項目。每個項目都是一個 JSON 物件,包含以下成員:name
一個字串,指定組態的名稱,例如
Debug
。directories
一個 JSON 陣列,其中每個項目對應於一個建置系統目錄,該目錄的原始碼目錄包含一個
CMakeLists.txt
檔案。第一個項目對應於頂層目錄。每個項目都是一個 JSON 物件,包含以下成員:source
一個字串,指定來源目錄的路徑,以正斜線表示。如果目錄位於最上層的來源目錄內,則路徑會相對於該目錄指定(最上層來源目錄本身以
.
表示)。否則路徑是絕對路徑。build
一個字串,指定建置目錄的路徑,以正斜線表示。如果目錄位於最上層的建置目錄內,則路徑會相對於該目錄指定(最上層建置目錄本身以
.
表示)。否則路徑是絕對路徑。parentIndex
選用成員,當目錄不是最上層時存在。此值為一個無號整數,從 0 開始索引,指向主
directories
陣列中的另一個項目,該項目對應於將此目錄新增為子目錄的父目錄。childIndexes
選用成員,當目錄有子目錄時存在。此值是一個 JSON 陣列,其中的項目對應於由
add_subdirectory()
或subdirs()
指令建立的子目錄。每個項目都是一個無號整數,從 0 開始索引,指向主directories
陣列中的另一個項目。projectIndex
一個無號整數,從 0 開始索引,指向主
projects
陣列,表示此目錄所屬的建置系統專案。targetIndexes
選用成員,當目錄本身具有目標時存在,不包括屬於子目錄的目標。此值是一個 JSON 陣列,其中的項目對應於這些目標。每個項目都是一個無號整數,從 0 開始索引,指向主
targets
陣列。minimumCMakeVersion
選用成員,當目錄已知的 CMake 最低要求版本時存在。這是該目錄本身或其祖先中,對
cmake_minimum_required(VERSION)
指令最本地呼叫所提供的<min>
版本。此值是一個 JSON 物件,包含一個成員string
一個字串,指定所需的最低版本,格式為
<major>.<minor>[.<patch>[.<tweak>]][<suffix>]
每個組成部分都是一個無號整數,而後綴可以是任意字串。
hasInstallRule
選用成員,當目錄或其子目錄之一包含任何
install()
規則時,會以布林值true
存在,也就是是否有make install
或等效規則可用。jsonFile
一個 JSON 字串,指定相對於 codemodel 檔案的路徑,指向另一個包含 「codemodel」版本 2「目錄」物件的 JSON 檔案。
此欄位是在 codemodel 版本 2.3 中新增的。
projects
一個 JSON 陣列,其中的項目對應於建置系統中定義的最上層專案和子專案。每個(子)專案都對應於一個來源目錄,其
CMakeLists.txt
檔案呼叫project()
指令時,專案名稱與其父目錄不同。第一個項目對應於最上層專案。每個項目都是一個 JSON 物件,其中包含成員
name
一個字串,指定給
project()
指令的名稱。parentIndex
選用成員,當專案不是最上層時存在。此值為一個無號整數,從 0 開始索引,指向主
projects
陣列中的另一個項目,該項目對應於將此專案新增為子專案的父專案。childIndexes
選用成員,當專案有子專案時存在。此值是一個 JSON 陣列,其中的項目對應於這些子專案。每個項目都是一個無號整數,從 0 開始索引,指向主
projects
陣列中的另一個項目。directoryIndexes
一個 JSON 陣列,其中的項目對應於屬於專案一部分的建置系統目錄。第一個項目對應於專案的最上層目錄。每個項目都是一個無號整數,從 0 開始索引,指向主
directories
陣列。targetIndexes
選用成員,當專案本身具有目標時存在,不包括屬於子專案的目標。此值是一個 JSON 陣列,其中的項目對應於這些目標。每個項目都是一個無號整數,從 0 開始索引,指向主
targets
陣列。
targets
一個 JSON 陣列,其中的項目對應於建置系統目標。這些目標是透過呼叫
add_executable()
、add_library()
和add_custom_target()
建立的,不包括匯入的目標和介面函式庫(這些不會產生任何建置規則)。每個項目都是一個 JSON 物件,其中包含成員name
一個字串,指定目標名稱。
id
一個字串,唯一識別目標。這與
jsonFile
所參照的檔案中的id
欄位相符。directoryIndex
一個無號整數,從 0 開始索引,指向主
directories
陣列,表示定義目標的建置系統目錄。projectIndex
一個無號整數,從 0 開始索引,指向主
projects
陣列,表示定義目標的建置系統專案。jsonFile
一個 JSON 字串,指定相對於 codemodel 檔案的路徑,指向另一個包含 「codemodel」版本 2「目標」物件的 JSON 檔案。
「codemodel」版本 2「目錄」物件¶
codemodel「目錄」物件由 「codemodel」版本 2 物件的 directories
陣列參照。每個「目錄」物件都是一個 JSON 物件,其中包含成員
paths
一個 JSON 物件,包含以下成員:
source
一個字串,指定來源目錄的路徑,以正斜線表示。如果目錄位於最上層的來源目錄內,則路徑會相對於該目錄指定(最上層來源目錄本身以
.
表示)。否則路徑是絕對路徑。build
一個字串,指定建置目錄的路徑,以正斜線表示。如果目錄位於最上層的建置目錄內,則路徑會相對於該目錄指定(最上層建置目錄本身以
.
表示)。否則路徑是絕對路徑。
installers
一個 JSON 陣列,其中的項目對應於
install()
規則。每個項目都是一個 JSON 物件,其中包含成員component
一個字串,指定對應的
install()
指令呼叫所選取的元件。destination
選用成員,對於以下特定的
type
值存在。此值是一個字串,指定安裝目標路徑。路徑可以是絕對路徑或相對於安裝前置詞的相對路徑。paths
選用成員,對於以下特定的
type
值存在。此值是一個 JSON 陣列,其中的項目對應於要安裝的路徑(檔案或目錄)。每個項目都是以下其中之一一個字串,指定要從中安裝檔案或目錄的路徑。路徑中不以
/
開頭的部分也指定要安裝到目標下的路徑(名稱)。一個 JSON 物件,其中包含成員
from
一個字串,指定要從中安裝檔案或目錄的路徑。
to
一個字串,指定要將檔案或目錄安裝到目標下的路徑。
在這兩種情況下,路徑都以正斜線表示。如果「from」路徑位於對應的
type
值記錄的最上層目錄內,則路徑會相對於該目錄指定。否則路徑是絕對路徑。type
一個字串,指定安裝規則的類型。此值是以下其中之一,其中一些變體提供其他成員
file
一個
install(FILES)
或install(PROGRAMS)
呼叫。destination
和paths
成員會被填入,其中最上層來源目錄下的路徑會以相對於它的方式表示。isOptional
成員可能存在。此類型沒有其他成員。directory
一個
install(DIRECTORY)
呼叫。destination
和paths
成員會被填入值,路徑是相對於頂層 *source* 目錄表示。isOptional
成員可能存在。此類型沒有其他成員。target
一個
install(TARGETS)
呼叫。destination
和paths
成員會被填入值,路徑是相對於頂層 *build* 目錄表示。isOptional
成員可能存在。此類型具有額外的成員targetId
、targetIndex
、targetIsImportLibrary
和targetInstallNamelink
。export
一個
install(EXPORT)
呼叫。destination
和paths
成員會被填入值,路徑是相對於頂層 *build* 目錄表示。paths
條目是指 CMake 自動為安裝產生之檔案,而其真實值被視為私有實作細節。此類型具有額外的成員exportName
和exportTargets
。script
一個
install(SCRIPT)
呼叫。此類型具有額外的成員scriptFile
。code
一個
install(CODE)
呼叫。此類型沒有其他成員。importedRuntimeArtifacts
一個
install(IMPORTED_RUNTIME_ARTIFACTS)
呼叫。destination
成員會被填入值。isOptional
成員可能存在。此類型沒有其他成員。runtimeDependencySet
一個
install(RUNTIME_DEPENDENCY_SET)
呼叫或一個install(TARGETS)
帶有RUNTIME_DEPENDENCIES
的呼叫。destination
成員會被填入值。此類型具有額外的成員runtimeDependencySetName
和runtimeDependencySetType
。fileSet
一個
install(TARGETS)
帶有FILE_SET
的呼叫。destination
和paths
成員會被填入值。isOptional
成員可能存在。此類型具有額外的成員fileSetName
、fileSetType
、fileSetDirectories
和fileSetTarget
。此類型是在 codemodel 版本 2.4 中新增的。
isExcludeFromAll
當
install()
呼叫時帶有EXCLUDE_FROM_ALL
選項時,會出現此可選成員,其布林值為true
。isForAllComponents
當
install(SCRIPT|CODE)
呼叫時帶有ALL_COMPONENTS
選項時,會出現此可選成員,其布林值為true
。isOptional
當
install()
呼叫時帶有OPTIONAL
選項時,會出現此可選成員,其布林值為true
。當type
為file
、directory
或target
時允許使用此選項。targetId
當
type
為target
時,會出現此可選成員。其值為字串,唯一識別要安裝的目標。這與主「codemodel」物件之targets
陣列中目標的id
成員相符。targetIndex
當
type
為target
時,會出現此可選成員。其值為無號整數,從 0 開始的索引,表示主「codemodel」物件之targets
陣列中要安裝的目標。targetIsImportLibrary
當
type
為target
且安裝程式用於 Windows DLL 匯入程式庫檔案或 AIX 連結器匯入檔案時,會出現此可選成員。如果存在,其布林值為true
。targetInstallNamelink
當
type
為target
且安裝程式對應於可能使用符號連結來實作VERSION
和SOVERSION
目標屬性的目標時,會出現此可選成員。其值為字串,表示安裝程式應如何處理符號連結:skip
表示安裝程式應跳過符號連結,僅安裝真實檔案,而only
表示安裝程式應僅安裝符號連結,而非真實檔案。在所有情況下,paths
成員會列出實際安裝的內容。exportName
當
type
為export
時,會出現此可選成員。其值為字串,指定匯出的名稱。exportTargets
當
type
為export
時,會出現此可選成員。其值為 JSON 陣列,包含與匯出中包含的目標相對應的條目。每個條目都是一個 JSON 物件,具有成員id
唯一識別目標的字串。這與主「codemodel」物件之
targets
陣列中目標的id
成員相符。索引
無號整數,從 0 開始的索引,表示主「codemodel」物件之
targets
陣列中要安裝的目標。
runtimeDependencySetName
當
type
為runtimeDependencySet
且安裝程式是由install(RUNTIME_DEPENDENCY_SET)
呼叫建立時,會出現此可選成員。其值為字串,指定已安裝之執行階段相依性集合的名稱。runtimeDependencySetType
當
type
為runtimeDependencySet
時,會出現此可選成員。其值為字串,具有以下其中一個值library
表示此安裝程式安裝的相依性不是 macOS 框架。
framework
表示此安裝程式安裝的相依性是 macOS 框架。
fileSetName
當
type
為fileSet
時,會出現此可選成員。其值為字串,表示檔案集合的名稱。此欄位是在 codemodel 版本 2.4 中新增的。
fileSetType
當
type
為fileSet
時,會出現此可選成員。其值為字串,表示檔案集合的類型。此欄位是在 codemodel 版本 2.4 中新增的。
fileSetDirectories
當
type
為fileSet
時,會出現此可選成員。其值為字串清單,表示檔案集合的基礎目錄 (由HEADER_DIRS
或HEADER_DIRS_<NAME>
的 genex 評估決定)。此欄位是在 codemodel 版本 2.4 中新增的。
fileSetTarget
當
type
為fileSet
時,會出現此可選成員。其值為 JSON 物件,具有成員id
唯一識別目標的字串。這與主「codemodel」物件之
targets
陣列中目標的id
成員相符。索引
無號整數,從 0 開始的索引,表示主「codemodel」物件之
targets
陣列中要安裝的目標。
此欄位是在 codemodel 版本 2.4 中新增的。
scriptFile
當
type
為script
時,此為選用成員。其值為一個字串,指定磁碟上腳本檔案的路徑,並以正斜線表示。如果檔案位於最上層的原始碼目錄內,則路徑是相對於該目錄所指定。否則,路徑是絕對路徑。回溯追蹤 (backtrace)
當 CMake 語言回溯追蹤至
install()
或其他新增此安裝程式的命令呼叫可用時,此為選用成員。其值為一個無號整數,表示在backtraceGraph
成員的nodes
陣列中從 0 開始的索引。
回溯追蹤圖 (backtraceGraph)
一個「codemodel」版本 2「回溯追蹤圖」,其節點由這個「目錄」物件中其他位置的
backtrace
成員所參考。
「codemodel」版本 2「目標」物件¶
codemodel「目標」物件是由「codemodel」版本 2物件的 targets
陣列所參考。每個「目標」物件都是一個 JSON 物件,帶有以下成員:
name
一個字串,指定目標的邏輯名稱。
id
一個唯一識別目標的字串。格式未指定,客戶端不應解譯。
type
一個字串,指定目標的類型。值為
EXECUTABLE
、STATIC_LIBRARY
、SHARED_LIBRARY
、MODULE_LIBRARY
、OBJECT_LIBRARY
、INTERFACE_LIBRARY
或UTILITY
其中之一。回溯追蹤 (backtrace)
當 CMake 語言回溯追蹤至原始碼中建立目標的命令可用時,此為選用成員。其值為一個無號整數,表示在
backtraceGraph
成員的nodes
陣列中從 0 開始的索引。資料夾 (folder)
當設定
FOLDER
目標屬性時,此為選用成員。其值為一個 JSON 物件,具有一個成員:name
一個字串,指定目標資料夾的名稱。
paths
一個 JSON 物件,包含以下成員:
source
一個字串,指定目標原始碼目錄的路徑,並以正斜線表示。如果目錄位於最上層的原始碼目錄內,則路徑是相對於該目錄所指定 (最上層原始碼目錄本身使用
.
)。否則,路徑是絕對路徑。build
一個字串,指定目標組建目錄的路徑,並以正斜線表示。如果目錄位於最上層的組建目錄內,則路徑是相對於該目錄所指定 (最上層組建目錄本身使用
.
)。否則,路徑是絕對路徑。
磁碟上的名稱 (nameOnDisk)
對於連結或封存到單一主要成品的可執行檔和程式庫目標,此為選用成員。其值為一個字串,指定該成品在磁碟上的檔案名稱。
成品 (artifacts)
對於在磁碟上產生供相依項使用的成品的可執行檔和程式庫目標,此為選用成員。其值為對應至成品的 JSON 陣列。每個項目都是一個 JSON 物件,包含一個成員:
路徑 (path)
一個字串,指定磁碟上檔案的路徑,並以正斜線表示。如果檔案位於最上層的組建目錄內,則路徑是相對於該目錄所指定。否則,路徑是絕對路徑。
是否由產生器提供 (isGeneratorProvided)
如果目標是由 CMake 的組建系統產生器而非原始碼中的命令所提供,則此為選用成員,其布林值為
true
。安裝 (install)
當目標具有
install()
規則時,此為選用成員。其值為一個 JSON 物件,帶有以下成員:前綴 (prefix)
一個 JSON 物件,指定安裝前綴。它有一個成員:
路徑 (path)
一個字串,指定
CMAKE_INSTALL_PREFIX
的值。
目的地 (destinations)
一個 JSON 陣列,指定安裝目的地路徑。每個項目都是一個 JSON 物件,帶有以下成員:
路徑 (path)
一個字串,指定安裝目的地路徑。路徑可能是絕對路徑,或相對於安裝前綴的路徑。
回溯追蹤 (backtrace)
當 CMake 語言回溯追蹤至指定此目的地的
install()
命令呼叫可用時,此為選用成員。其值為一個無號整數,表示在backtraceGraph
成員的nodes
陣列中從 0 開始的索引。
啟動器 (launchers)
對於專案指定至少一個啟動器的可執行檔目標,此為選用成員。其值為對應至指定啟動器的 JSON 陣列。每個項目都是一個 JSON 物件,帶有以下成員:
命令 (command)
一個字串,指定磁碟上啟動器的路徑,並以正斜線表示。如果檔案位於最上層的原始碼目錄內,則路徑是相對於該目錄所指定。
引數 (arguments)
當啟動器命令在要啟動的可執行檔之前具有引數時,此為選用成員。其值為一個字串 JSON 陣列,代表引數。
type
一個字串,指定啟動器的類型。值為以下其中之一:
模擬器 (emulator)
交叉編譯時,目標平台的模擬器。請參閱
CROSSCOMPILING_EMULATOR
目標屬性。測試 (test)
測試執行的啟動程式。請參閱
TEST_LAUNCHER
目標屬性。
此欄位已在 codemodel 2.7 版中新增。
連結 (link)
對於連結到執行階段二進位檔的可執行檔和共用程式庫目標,此為選用成員。其值為一個 JSON 物件,具有描述連結步驟的成員:
語言 (language)
一個字串,指定用於叫用連結器的工具鏈語言 (例如,
C
、CXX
、Fortran
)。命令片段 (commandFragments)
當連結命令列呼叫片段可用時,此為選用成員。其值為一個 JSON 陣列,指定排序過的片段。每個項目都是一個 JSON 物件,帶有以下成員:
片段 (fragment)
一個字串,指定連結命令列呼叫的片段。此值會編碼為組建系統的原生 shell 格式。
角色 (role)
一個字串,指定片段內容的角色
flags
:連結旗標。libraries
:連結程式庫檔案路徑或旗標。libraryPath
:程式庫搜尋路徑旗標。frameworkPath
:macOS 框架搜尋路徑旗標。
LTO
當啟用連結時最佳化 (又稱跨程序最佳化或連結時程式碼產生) 時,此為選用成員,其布林值為
true
。系統根目錄 (sysroot)
當定義
CMAKE_SYSROOT_LINK
或CMAKE_SYSROOT
變數時,此為選用成員。其值為一個 JSON 物件,具有一個成員:路徑 (path)
一個字串,指定系統根目錄的絕對路徑,並以正斜線表示。
封存 (archive)
對於靜態程式庫目標,此為選用成員。其值為一個 JSON 物件,具有描述封存步驟的成員:
命令片段 (commandFragments)
當封存器命令列呼叫片段可用時,此為選用成員。其值為一個 JSON 陣列,指定片段。每個項目都是一個 JSON 物件,帶有以下成員:
片段 (fragment)
一個字串,指定封存器命令列呼叫的片段。此值會編碼為組建系統的原生 shell 格式。
角色 (role)
一個字串,指定片段內容的角色
flags
:封存器旗標。
LTO
當啟用連結時最佳化 (又稱跨程序最佳化或連結時程式碼產生) 時,此為選用成員,其布林值為
true
。
相依性 (dependencies)
當目標相依於其他目標時,此為選用成員。其值為對應至相依性的 JSON 陣列。每個項目都是一個 JSON 物件,帶有以下成員:
id
一個字串,唯一識別此目標所相依的目標。這與其他目標的主要
id
成員相符。回溯追蹤 (backtrace)
當 CMake 語言回溯追蹤至
add_dependencies()
、target_link_libraries()
或其他建立此相依性的命令呼叫可用時,此為選用成員。其值為一個無號整數,表示在backtraceGraph
成員的nodes
陣列中從 0 開始的索引。
檔案集 (fileSets)
一個 JSON 陣列,對應至目標的檔案集。每個項目都是一個 JSON 物件,帶有以下成員:
name
一個字串,指定檔案集的名稱。
type
一個字串,指定檔案集合的類型。請參閱
target_sources()
支援的檔案集合類型。visibility
一個字串,指定檔案集合的可見性;可為
PUBLIC
、PRIVATE
或INTERFACE
其中之一。baseDirectories
一個字串的 JSON 陣列,每個字串指定檔案集合中包含來源的基本目錄。如果目錄位於最上層的來源目錄內,則路徑會指定為相對於該目錄的路徑。否則,路徑為絕對路徑。
此欄位在 codemodel 版本 2.5 中新增。
sources
一個對應於目標來源檔案的條目的 JSON 陣列。每個條目都是一個具有成員的 JSON 物件
路徑 (path)
一個字串,指定磁碟上來源檔案的路徑,以正斜線表示。如果檔案位於最上層的來源目錄內,則路徑會指定為相對於該目錄的路徑。否則,路徑為絕對路徑。
compileGroupIndex
可選成員,當來源被編譯時存在。該值是一個從 0 開始的無號整數索引,指向
compileGroups
陣列。sourceGroupIndex
可選成員,當來源透過
source_group()
命令或預設方式成為來源群組的一部分時存在。該值是一個從 0 開始的無號整數索引,指向sourceGroups
陣列。isGenerated
可選成員,如果來源是
GENERATED
,則以布林值true
存在。fileSetIndex
可選成員,當來源是檔案集合的一部分時存在。該值是一個從 0 開始的無號整數索引,指向
fileSets
陣列。此欄位在 codemodel 版本 2.5 中新增。
回溯追蹤 (backtrace)
可選成員,當有 CMake 語言回溯追蹤到
target_sources()
、add_executable()
、add_library()
、add_custom_target()
或其他將此來源新增到目標的命令調用時存在。該值是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。
sourceGroups
可選成員,當來源透過
source_group()
命令或預設方式分組在一起時存在。該值是一個對應於群組的條目的 JSON 陣列。每個條目都是一個具有成員的 JSON 物件name
一個字串,指定來源群組的名稱。
sourceIndexes
一個 JSON 陣列,列出屬於該群組的來源。每個條目都是一個從 0 開始的無號整數索引,指向目標的主要
sources
陣列。
compileGroups
可選成員,當目標具有要編譯的來源時存在。該值是一個對應於所有使用相同設定編譯的來源群組的條目的 JSON 陣列。每個條目都是一個具有成員的 JSON 物件
sourceIndexes
一個 JSON 陣列,列出屬於該群組的來源。每個條目都是一個從 0 開始的無號整數索引,指向目標的主要
sources
陣列。語言 (language)
一個字串,指定用於編譯來源檔案的工具鏈的語言(例如,
C
、CXX
、Fortran
)。languageStandard
可選成員,當語言標準明確設定時(例如,透過
CXX_STANDARD
)或透過編譯功能隱式設定時存在。每個條目都是一個具有兩個成員的 JSON 物件backtraces
可選成員,當有 CMake 語言回溯追蹤到
<LANG>_STANDARD
設定時存在。如果語言標準是透過編譯功能隱式設定的,則會使用這些編譯功能作為回溯追蹤。多個編譯功能可能需要相同的語言標準,因此可能有多個回溯追蹤。該值是一個 JSON 陣列,每個條目都是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。standard
表示語言標準的字串。
此欄位在 codemodel 版本 2.2 中新增。
compileCommandFragments
可選成員,當編譯器命令行調用的片段可用時存在。該值是一個 JSON 陣列,指定排序的片段。每個條目都是一個具有一個成員的 JSON 物件
片段 (fragment)
一個字串,指定編譯器命令行調用的片段。該值以建置系統的原生 Shell 格式編碼。
includes
可選成員,當有包含目錄時存在。該值是一個 JSON 陣列,每個目錄都有一個條目。每個條目都是一個具有成員的 JSON 物件
路徑 (path)
一個字串,指定包含目錄的路徑,以正斜線表示。
isSystem
可選成員,如果包含目錄被標記為系統包含目錄,則以布林值
true
存在。回溯追蹤 (backtrace)
可選成員,當有 CMake 語言回溯追蹤到
target_include_directories()
或其他將此包含目錄新增的命令調用時存在。該值是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。
frameworks
可選成員,當在 Apple 平台上存在框架時存在。該值是一個 JSON 陣列,每個目錄都有一個條目。每個條目都是一個具有成員的 JSON 物件
路徑 (path)
一個字串,指定框架目錄的路徑,以正斜線表示。
isSystem
可選成員,如果框架被標記為系統框架,則以布林值
true
存在。回溯追蹤 (backtrace)
可選成員,當有 CMake 語言回溯追蹤到
target_link_libraries()
或其他將此框架新增的命令調用時存在。該值是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。
此欄位在 codemodel 版本 2.6 中新增。
precompileHeaders
可選成員,當
target_precompile_headers()
或其他命令調用在目標上設定PRECOMPILE_HEADERS
時存在。該值是一個 JSON 陣列,每個標頭都有一個條目。每個條目都是一個具有成員的 JSON 物件header
預編譯標頭檔的完整路徑。
回溯追蹤 (backtrace)
可選成員,當有 CMake 語言回溯追蹤到
target_precompile_headers()
或其他將此預編譯標頭新增的命令調用時存在。該值是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。
此欄位在 codemodel 版本 2.1 中新增。
defines
可選成員,當有前置處理器定義時存在。該值是一個 JSON 陣列,每個定義都有一個條目。每個條目都是一個具有成員的 JSON 物件
define
一個字串,以前置處理器定義的格式
<name>[=<value>]
指定,例如DEF
或DEF=1
。回溯追蹤 (backtrace)
可選成員,當有 CMake 語言回溯追蹤到
target_compile_definitions()
或其他將此前置處理器定義新增的命令調用時存在。該值是一個從 0 開始的無號整數索引,指向backtraceGraph
成員的nodes
陣列。
系統根目錄 (sysroot)
可選成員,當定義
CMAKE_SYSROOT_COMPILE
或CMAKE_SYSROOT
變數時存在。該值是一個具有一個成員的 JSON 物件路徑 (path)
一個字串,指定系統根目錄的絕對路徑,並以正斜線表示。
回溯追蹤圖 (backtraceGraph)
一個 「codemodel」版本 2「回溯追蹤圖」,其節點會在該「目標」物件的其他地方從
backtrace
成員中參考。
「codemodel」版本 2「回溯追蹤圖」¶
在「codemodel」版本 2 的「目錄」物件或「codemodel」版本 2 的「目標」物件中,backtraceGraph
成員是一個 JSON 物件,描述了回溯的圖形。它的節點由包含物件中其他地方的 backtrace
成員引用。回溯圖形物件的成員如下:
nodes
一個 JSON 陣列,列出回溯圖形中的節點。每個條目都是一個 JSON 物件,包含以下成員:
file
一個以 0 為基底的無符號整數,表示在回溯
files
陣列中的索引。line
當節點表示檔案中的某行時,可選的成員存在。該值是一個以 1 為基底的無符號整數,表示行號。
命令 (command)
當節點表示檔案中的命令調用時,可選的成員存在。該值是一個以 0 為基底的無符號整數,表示在回溯
commands
陣列中的索引。parent
當節點不是呼叫堆疊的底部時,可選的成員存在。該值是一個以 0 為基底的無符號整數,表示回溯
nodes
陣列中另一個條目的索引。
commands
一個 JSON 陣列,列出回溯節點引用的命令名稱。每個條目都是一個字串,指定一個命令名稱。
files
一個 JSON 陣列,列出回溯節點引用的 CMake 語言檔案。每個條目都是一個字串,指定檔案的路徑,並以正斜線表示。如果檔案位於頂層原始碼目錄中,則路徑是相對於該目錄指定的。否則,路徑是絕對路徑。
物件種類「configureLog」¶
configureLog
物件種類描述了 cmake-configure-log(7)
檔案的位置和內容。
只有一個 configureLog
物件主要版本,即版本 1。
「configureLog」版本 1¶
configureLog
物件版本 1 是一個 JSON 物件
{
"kind": "configureLog",
"version": { "major": 1, "minor": 0 },
"path": "/path/to/top-level-build-dir/CMakeFiles/CMakeConfigureLog.yaml",
"eventKindNames": [ "try_compile-v1", "try_run-v1" ]
}
configureLog
物件特有的成員如下:
路徑 (path)
一個字串,指定配置日誌檔案的路徑。用戶端必須從此路徑讀取日誌檔案,此路徑可能與
cmake-configure-log(7)
所記載的路徑不同。如果沒有記錄任何事件,則日誌檔案可能不存在。eventKindNames
一個 JSON 陣列,其條目各為一個 JSON 字串,命名
cmake-configure-log(7)
版本化的事件種類之一。最多會列出每個配置日誌事件種類的一個版本。雖然配置日誌可能包含其他(版本化)事件種類,但用戶端必須忽略此欄位中未列出的種類。
物件種類「cache」¶
cache
物件種類列出快取條目。這些是儲存在建置樹的永久快取 (CMakeCache.txt
) 中的變數。
只有一個 cache
物件主要版本,即版本 2。為了避免與cmake-server(7)
模式的快取混淆,不存在版本 1。
「cache」版本 2¶
cache
物件版本 2 是一個 JSON 物件
{
"kind": "cache",
"version": { "major": 2, "minor": 0 },
"entries": [
{
"name": "BUILD_SHARED_LIBS",
"value": "ON",
"type": "BOOL",
"properties": [
{
"name": "HELPSTRING",
"value": "Build shared libraries"
}
]
},
{
"name": "CMAKE_GENERATOR",
"value": "Unix Makefiles",
"type": "INTERNAL",
"properties": [
{
"name": "HELPSTRING",
"value": "Name of generator."
}
]
}
]
}
cache
物件特有的成員如下:
entries
一個 JSON 陣列,其條目各為一個 JSON 物件,指定一個快取條目。每個條目的成員如下:
name
一個字串,指定條目的名稱。
value
一個字串,指定條目的值。
type
一個字串,指定
cmake-gui(1)
用於選擇編輯小工具的條目類型。properties
一個 JSON 陣列,其中包含指定相關快取條目屬性的條目。每個條目都是一個 JSON 物件,包含以下成員:
name
一個字串,指定快取條目屬性的名稱。
value
一個字串,指定快取條目屬性的值。
物件種類「cmakeFiles」¶
cmakeFiles
物件種類列出 CMake 在配置和產生建置系統時使用的檔案。這些檔案包括 CMakeLists.txt
檔案以及包含的 .cmake
檔案。
只有一個 cmakeFiles
物件主要版本,即版本 1。
「cmakeFiles」版本 1¶
cmakeFiles
物件版本 1 是一個 JSON 物件
{
"kind": "cmakeFiles",
"version": { "major": 1, "minor": 1 },
"paths": {
"build": "/path/to/top-level-build-dir",
"source": "/path/to/top-level-source-dir"
},
"inputs": [
{
"path": "CMakeLists.txt"
},
{
"isGenerated": true,
"path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
},
{
"isExternal": true,
"path": "/path/to/external/third-party/module.cmake"
},
{
"isCMake": true,
"isExternal": true,
"path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
}
],
"globsDependent": [
{
"expression": "src/*.cxx",
"recurse": true,
"files": [
"src/foo.cxx",
"src/bar.cxx"
]
}
]
}
cmakeFiles
物件特有的成員如下:
paths
一個 JSON 物件,包含以下成員:
source
一個字串,指定頂層原始碼目錄的絕對路徑,以正斜線表示。
build
一個字串,指定頂層建置目錄的絕對路徑,以正斜線表示。
inputs
一個 JSON 陣列,其條目各為一個 JSON 物件,指定 CMake 在配置和產生建置系統時使用的輸入檔案。每個條目的成員如下:
路徑 (path)
一個字串,指定 CMake 輸入檔案的路徑,並以正斜線表示。如果檔案位於頂層原始碼目錄中,則路徑是相對於該目錄指定的。否則,路徑是絕對路徑。
isGenerated
如果路徑指定的檔案位於頂層建置目錄下,並且建置是異地建置,則此選用成員會以布林值
true
存在。此成員在原地建置中不可用。isExternal
如果路徑指定的檔案不位於頂層原始碼或建置目錄下,則此選用成員會以布林值
true
存在。isCMake
如果路徑指定的檔案位於 CMake 安裝中,則此選用成員會以布林值
true
存在。
globsDependent
當專案呼叫
file(GLOB)
或file(GLOB_RECURSE)
並使用CONFIGURE_DEPENDS
選項時,此選用成員會存在。該值是一個 JSON 物件的 JSON 陣列,每個物件指定一個 globbing 表達式以及它所匹配的路徑清單。如果 globbing 表達式不再匹配相同的路徑清單,CMake 會認為建置系統已過期。此欄位已在
cmakeFiles
版本 1.1 中新增。每個條目的成員如下:
expression
一個字串,指定 globbing 表達式。
recurse
如果條目對應於
file(GLOB_RECURSE)
呼叫,則此選用成員會以布林值true
存在。否則,條目對應於file(GLOB)
呼叫。listDirectories
如果呼叫
file(GLOB)
時未使用LIST_DIRECTORIES false
,或呼叫file(GLOB_RECURSE)
時使用了LIST_DIRECTORIES true
,則此選用成員會以布林值true
存在。followSymlinks
如果呼叫
file(GLOB)
時使用了FOLLOW_SYMLINKS
選項,則此選用成員會以布林值true
存在。relative
如果呼叫
file(GLOB)
時使用了RELATIVE <path>
選項,則此選用成員會存在。該值是一個字串,包含給定的<path>
。paths
一個字串的 JSON 陣列,指定對
file(GLOB)
或file(GLOB_RECURSE)
的呼叫所匹配的路徑。
物件種類「toolchains」¶
toolchains
物件種類列出建置期間使用的工具鏈的屬性。這些屬性包括語言、編譯器路徑、ID 和版本。
只有一個 toolchains
物件的主要版本,即版本 1。
"toolchains" 版本 1¶
toolchains
物件版本 1 是一個 JSON 物件
{
"kind": "toolchains",
"version": { "major": 1, "minor": 0 },
"toolchains": [
{
"language": "C",
"compiler": {
"path": "/usr/bin/cc",
"id": "GNU",
"version": "9.3.0",
"implicit": {
"includeDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"linkDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9",
"/usr/lib/x86_64-linux-gnu",
"/usr/lib",
"/lib/x86_64-linux-gnu",
"/lib"
],
"linkFrameworkDirectories": [],
"linkLibraries": [ "gcc", "gcc_s", "c", "gcc", "gcc_s" ]
}
},
"sourceFileExtensions": [ "c", "m" ]
},
{
"language": "CXX",
"compiler": {
"path": "/usr/bin/c++",
"id": "GNU",
"version": "9.3.0",
"implicit": {
"includeDirectories": [
"/usr/include/c++/9",
"/usr/include/x86_64-linux-gnu/c++/9",
"/usr/include/c++/9/backward",
"/usr/lib/gcc/x86_64-linux-gnu/9/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"linkDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9",
"/usr/lib/x86_64-linux-gnu",
"/usr/lib",
"/lib/x86_64-linux-gnu",
"/lib"
],
"linkFrameworkDirectories": [],
"linkLibraries": [
"stdc++", "m", "gcc_s", "gcc", "c", "gcc_s", "gcc"
]
}
},
"sourceFileExtensions": [
"C", "M", "c++", "cc", "cpp", "cxx", "mm", "CPP"
]
}
]
}
toolchains
物件特有的成員如下
toolchains
一個 JSON 陣列,其每個條目都是一個 JSON 物件,用於指定與特定語言關聯的工具鏈。每個條目的成員如下:
語言 (language)
一個 JSON 字串,用於指定工具鏈語言,如 C 或 CXX。語言名稱與可傳遞給
project()
命令的語言名稱相同。由於 CMake 僅支援每種語言單一工具鏈,因此此欄位可用作索引鍵。compiler
一個 JSON 物件,包含以下成員:
路徑 (path)
當為目前語言定義了
CMAKE_<LANG>_COMPILER
變數時,此為可選成員。其值為一個 JSON 字串,其中包含編譯器的路徑。id
當為目前語言定義了
CMAKE_<LANG>_COMPILER_ID
變數時,此為可選成員。其值為一個 JSON 字串,其中包含編譯器的 ID (GNU、MSVC 等)。version
當為目前語言定義了
CMAKE_<LANG>_COMPILER_VERSION
變數時,此為可選成員。其值為一個 JSON 字串,其中包含編譯器的版本。target
當為目前語言定義了
CMAKE_<LANG>_COMPILER_TARGET
變數時,此為可選成員。其值為一個 JSON 字串,其中包含編譯器的交叉編譯目標。implicit
一個 JSON 物件,包含以下成員:
includeDirectories
當為目前語言定義了
CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES
變數時,此為可選成員。其值為一個 JSON 字串陣列,其中每個字串都包含編譯器的隱含包含目錄的路徑。linkDirectories
當為目前語言定義了
CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES
變數時,此為可選成員。其值為一個 JSON 字串陣列,其中每個字串都包含編譯器的隱含連結目錄的路徑。linkFrameworkDirectories
當為目前語言定義了
CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
變數時,此為可選成員。其值為一個 JSON 字串陣列,其中每個字串都包含編譯器的隱含連結框架目錄的路徑。linkLibraries
當為目前語言定義了
CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES
變數時,此為可選成員。其值為一個 JSON 字串陣列,其中每個字串都包含編譯器的隱含連結程式庫的路徑。
sourceFileExtensions
當為目前語言定義了
CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS
變數時,此為可選成員。其值為一個 JSON 字串陣列,其中每個字串都包含該語言的檔案副檔名(不含開頭的點)。