CMakeSettings.json
架構參考
Visual Studio 2017 和更新版本中支援 CMake 專案。
檔案 CMakeSettings.json
包含 Visual Studio 用於 IntelliSense 的資訊,以及建構它針對指定組態和編譯器環境傳遞至 CMake 的命令列引數。 組 態 會指定套用至特定平臺和組建類型的屬性,例如 x86-Debug
或 Linux-Release
。 每個組態都會指定環境 ,其會封裝編譯器工具組的相關資訊,例如 MSVC、GCC 或 Clang。 CMake 會使用命令列引數來重新產生專案的根 CMakeCache.txt
檔案和其他專案檔。 這些值可以在檔案中 CMakeLists.txt
覆寫。
您可以在 IDE 中新增或移除組態,然後直接在 JSON 檔案中編輯它們,或使用 CMake 設定編輯器 (Visual Studio 2019 和更新版本)。 您可以在 IDE 中輕鬆地切換組態,以產生各種專案檔。 如需詳細資訊,請參閱 在 Visual Studio 中自訂 CMake 組建設定。
設定
陣列 configurations
包含 CMake 專案的所有組態。 如需預先定義組態的詳細資訊,請參閱 CMake 預先定義的組態參考 。 您可以將任意數目的預先定義或自訂群組態新增至檔案。
configuration
有這些屬性:
addressSanitizerEnabled
:如果true
為 ,請使用 AddressSanitizer 編譯器。 在 Linux 上,使用-fno-omit-frame-pointer
和 編譯器優化層級-Os
進行編譯,或-Oo
取得最佳結果。addressSanitizerRuntimeFlags
:傳遞至 環境變數中 AddressSanitizer 的ASAN_OPTIONS
執行時間旗標。 格式:flag1=value:flag2=value2。buildCommandArgs
:指定在 之後--build --
傳遞至 CMake 的原生組建參數。 例如,使用 Ninja 產生器時傳遞-v
會強制 Ninja 輸出命令列。 如需 Ninja 命令的詳細資訊,請參閱 Ninja 命令列自 變數。buildRoot
:指定 CMake 為所選產生器產生組建腳本的目錄。 地圖切換-DCMAKE_BINARY_DIR
並指定建立的位置CMakeCache.txt
。 如果資料夾不存在,則會建立該資料夾。 支援的巨集包括${workspaceRoot}
、${workspaceHash}
、${projectFile}
、${projectDir}
、${thisFile}
、${thisFileDir}
、${name}
、${generator}
、${env.VARIABLE}
。cacheGenerationCommand
:指定命令列工具和引數,例如gencache.bat debug
產生快取。 當使用者明確要求重新產生或CMakeLists.txt
修改 或CMakeSettings.json
檔案時,命令會從指定環境中的殼層執行。cacheRoot
:指定 CMake 快取的路徑。 此目錄應該包含現有的CMakeCache.txt
檔案。clangTidyChecks
:傳遞至 clang-tidy 的警告逗號分隔清單;允許萬用字元,且 '-' 前置詞會移除檢查。cmakeCommandArgs
:指定要在叫用以產生專案檔時傳遞至 CMake 的任何額外命令列選項。cmakeToolchain
:指定工具鏈檔案。 它會使用-DCMAKE_TOOLCHAIN_FILE
傳遞至 CMake。codeAnalysisRuleset
:指定執行程式碼分析時要使用的規則集。 您可以使用 Visual Studio 所安裝之規則集檔案的完整路徑或檔案名。configurationType
:指定所選產生器的組建類型組態。 可能是下列其中之一:Debug
Release
MinSizeRel
RelWithDebInfo
ctestCommandArgs
:指定要在執行測試時傳遞至 CTest 的任何額外命令列選項。description
:此組態的描述會出現在功能表中。enableClangTidyCodeAnalysis
:使用 Clang-Tidy 進行程式碼分析。enableMicrosoftCodeAnalysis
:使用 Microsoft 程式碼分析工具進行程式碼分析。generator
:指定要用於此組態的 CMake 產生器。 可能是下列其中之一:僅限 Visual Studio 2019:
Visual Studio 16 2019
Visual Studio 16 2019 Win64
Visual Studio 16 2019 ARM
Visual Studio 2017 及更新版本:
Visual Studio 15 2017
Visual Studio 15 2017 Win64
Visual Studio 15 2017 ARM
Visual Studio 14 2015
Visual Studio 14 2015 Win64
Visual Studio 14 2015 ARM
Unix Makefiles
Ninja
由於 Ninja 是專為快速建置速度所設計,而不是彈性和功能,因此它會設定為預設值。 不過,有些 CMake 專案可能無法使用 Ninja 正確地建置。 如果發生建置失敗,您可以指示 CMake 改為產生 Visual Studio 專案。
若要在 Visual Studio 2017 中指定 Visual Studio 產生器,請藉由選擇 CMake 從主功能表開啟設定編輯器 |變更 CMake 設定 。 刪除 「Ninja」,然後輸入 「V」。 這項變更會啟動 IntelliSense,讓您選擇您想要的產生器。
若要在 Visual Studio 2019 中指定 Visual Studio 產生器,請以滑鼠右鍵按一下 方案總管 中的檔案,然後選擇 [顯示進階設定 > CMake 產生器 ] 專案的 > CMake 設定。 CMakeLists.txt
根據預設,當使用中組態指定 Visual Studio 產生器時,它會使用引數叫用 -m -v:minimal
MSBuild。 若要自訂群組建,請使用 buildCommandArgs
檔案內的 CMakeSettings.json
屬性。 您可以在這裡指定要 傳遞至建置系統的 MSBuild 命令列引數 :
"buildCommandArgs": "-m:8 -v:minimal -p:PreferredToolArchitecture=x64"
installRoot
:指定 CMake 產生所選產生器安裝目標的目錄。 支援的巨集包括${workspaceRoot}
、${workspaceHash}
、${projectFile}
、${projectDir}
、${thisFile}
、${thisFileDir}
、${name}
、${generator}
、${env.VARIABLE}
。inheritEnvironments
:指定此組態相依的一或多個編譯器環境。 可以是任何自訂的環境,或預先定義的環境之一。 如需詳細資訊,請參閱環境。intelliSenseMode
:指定用於計算 Intellisense 資訊的模式。 此值可能是下列其中一項:windows-msvc-x86
windows-msvc-x64
windows-msvc-arm
windows-msvc-arm64
android-clang-x86
android-clang-x64
android-clang-arm
android-clang-arm64
ios-clang-x86
ios-clang-x64
ios-clang-arm
ios-clang-arm64
windows-clang-x86
windows-clang-x64
windows-clang-arm
windows-clang-arm64
linux-gcc-x86
linux-gcc-x64
linux-gcc-arm
name
:命名組態。 如需預先定義組態的詳細資訊,請參閱 CMake 預先定義的組態參考 。wslPath
:Windows 子系統 Linux 版 實例啟動器的路徑。
CMake Linux 專案的設定
remoteMachineName
:指定裝載 CMake、組建和偵錯工具的遠端 Linux 電腦名稱稱。 使用連線管理員新增新的 Linux 電腦。 支援的巨集包括${defaultRemoteMachineName}
。remoteCopySourcesOutputVerbosity
:指定來源複製作業的詳細資訊層級至遠端電腦。 可能是 、Verbose
或Diagnostic
的Normal
其中一個。remoteCopySourcesConcurrentCopies
:指定要在同步處理來源到遠端電腦時使用的並行複本(僅限 sftp)。remoteCopySourcesMethod
:指定將檔案複製到遠端電腦的方法。rsync
可以是 或sftp
。remoteCMakeListsRoot
:指定遠端電腦上的目錄,其中包含 CMake 專案。 支援的宏包括${workspaceRoot}
、、${workspaceHash}
、${thisFile}
${projectDir}
${projectFile}
、${thisFileDir}
、、${name}
、、${generator}
和 。${env.VARIABLE}
remoteBuildRoot
:指定 CMake 產生所選產生器組建腳本之遠端電腦上的目錄。 支援的巨集包括${workspaceRoot}
、${workspaceHash}
、${projectFile}
、${projectDir}
、${thisFile}
、${thisFileDir}
、${name}
、${generator}
、${env.VARIABLE}
。remoteInstallRoot
:指定 CMake 產生所選產生器安裝目標的遠端電腦上的目錄。 支援的宏包括${workspaceRoot}
、${workspaceHash}
、${thisFile}
${projectFile}
${projectDir}
${thisFileDir}
、${name}
、${generator}
和${env.VARIABLE}
,其中VARIABLE
是已在系統、使用者或工作階段層級定義的環境變數。remoteCopySources
boolean
:,指定 Visual Studio 是否應該將來源檔案複製到遠端電腦。 預設值為 True。 如果自行管理檔案同步處理,請設定為 false。remoteCopyBuildOutput
boolean
:,指定是否要從遠端系統複製組建輸出。remoteCopyAdditionalIncludeDirectories
:要從遠端電腦複製的其他包含目錄,以支援 IntelliSense。 格式為 「/path1;/path2...」。remoteCopyExcludeDirectories
:包含目錄 NOT 從遠端電腦複製。 格式為 「/path1;/path2...」。remoteCopyUseCompilerDefaults
:指定是否要使用編譯器的預設定義和包含 IntelliSense 的路徑。 只有當編譯器用來不支援 gcc 樣式引數時,才應為 false。rsyncCommandArgs
:指定傳遞至 rsync 的一組命令列選項。remoteCopySourcesExclusionList
array
:指定複製來源檔案時要排除的路徑清單:路徑可以是檔案/目錄的名稱,或是複製根目錄中的相對路徑。 萬用字元*
和?
可用於 glob 模式比對。cmakeExecutable
:指定 CMake 程式可執行檔的完整路徑,包括檔案名和副檔名。remotePreGenerateCommand
:指定要在執行 CMake 之前執行的命令來剖析CMakeLists.txt
檔案。remotePrebuildCommand
:指定要在遠端電腦上執行,再建置的命令。remotePostbuildCommand
:指定要在建置後於遠端電腦上執行的命令。variables
:包含傳-D name=value
給 CMake 的 CMake 變數名稱/值組。 如果您的 CMake 專案建置指示會指定將任何變數直接新增至CMakeCache.txt
檔案,建議您改為在這裡新增變數。 此範例示範如何指定名稱/值組,以使用 14.14.26428 MSVC 工具組:
"variables": [
{
"name": "CMAKE_CXX_COMPILER",
"value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
"type": "FILEPATH"
},
{
"name": "CMAKE_C_COMPILER",
"value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
"type": "FILEPATH"
}
]
如果您未定義 "type"
,則 "STRING"
預設會假設類型。
remoteCopyOptimizations
: Visual Studio 2019 16.5 版或更新版本 屬性,用於控制來源複製到遠端目標。 預設會啟用優化。 包含remoteCopyUseOptimizations
、rsyncSingleDirectoryCommandArgs
和remoteCopySourcesMaxSmallChange
。
環境
環境 會封裝 Visual Studio 用來叫用 CMake 程式中設定的環境變數。 針對 MSVC 專案,它會擷取特定平臺開發人員命令提示 字元中 設定的變數。 例如, msvc_x64_x64
環境與使用 -arch=amd64 -host_arch=amd64 引數執行 VS {version} 的開發人員命令提示字元相同。 您可以使用 env.{<variable_name>}
中的 CMakeSettings.json
語法來參考個別環境變數,例如建構資料夾的路徑。 提供下列預先定義的環境:
linux_arm
:遠端目標 ARM Linux。linux_x64
:遠端鎖定 x64 Linux。linux_x86
:從遠端鎖定 x86 Linux。msvc_arm
:以 MSVC 編譯器為目標的 ARM Windows。msvc_arm_x64
:以 64 位 MSVC 編譯器為目標的 ARM Windows。msvc_arm64
:以 MSVC 編譯器為目標的 ARM64 Windows。msvc_arm64_x64
:以 64 位 MSVC 編譯器為目標的 ARM64 Windows。msvc_arm64ec
:以 MSVC 編譯器ARM64EC Windows 為目標。msvc_arm64ec_x64
:以 64 位 MSVC 編譯器為目標ARM64EC Windows。msvc_x64
:以 MSVC 編譯器為目標的 x64 Windows。msvc_x64_x64
:以 64 位 MSVC 編譯器為目標的 x64 Windows。msvc_x86
:以 MSVC 編譯器為目標的 x86 Windows。msvc_x86_x64
:以 64 位 MSVC 編譯器為目標的 x86 Windows。
從 存取環境變數 CMakeLists.txt
CMakeLists.txt
從 檔案中,語法會參考 $ENV{variable_name}
所有環境變數。 若要查看環境的可用變數,請開啟對應的命令提示字元並輸入 SET
。 環境變數中的一些資訊也可透過 CMake 系統內省變數取得,但您可能會發現使用環境變數更方便。 例如,您可以透過環境變數輕鬆地擷取 MSVC 編譯器版本或 Windows SDK 版本。
自訂環境變數
在 中 CMakeSettings.json
,您可以在陣列中 environments
全域或個別組態定義自訂環境變數。 自訂環境是將一組屬性分組的便利方式。 您可以使用它取代預先定義的環境,或擴充或修改預先定義的環境。 environments
陣列中的每個項目都包含:
namespace
:將環境命名為 ,以便從 格式namespace.variable
的組態參考其變數。 預設的環境物件稱為env
,以特定的系統環境變數填入,包括%USERPROFILE%
。environment
:唯一識別此變數群組。 稍後在inheritEnvironments
項目中允許繼承該群組。groupPriority
:整數,指定評估這些變數時的優先順序。 先評估數值較高的項目。inheritEnvironments
:值陣列,指定這個群組繼承的環境集合。 此功能可讓您繼承預設環境,並建立自訂環境變數,以在 CMake 執行時傳遞至 CMake。
Visual Studio 2019 16.4 版和更新版本: 偵錯目標會隨著您在 中指定的 CMakeSettings.json
環境自動啟動。 您可以在 和 tasks.vs.json
中 launch.vs.json
覆寫或新增每個目標或每個工作上的環境變數。
下列範例會定義一個全域變數, BuildDir
其繼承于 x86-Debug 和 x64-Debug 組態中。 每個組態都會使用 變數來指定該組態的 buildRoot
屬性值。 另請注意,每個組態 inheritEnvironments
如何使用 屬性來指定僅適用于該組態的變數。
{
// The "environments" property is an array of key-value pairs of the form
// { "EnvVar1": "Value1", "EnvVar2": "Value2" }
"environments": [
{
"BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build",
}
],
"configurations": [
{
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
// Inherit the defaults for using the MSVC x86 compiler.
"inheritEnvironments": [ "msvc_x86" ],
"buildRoot": "${env.BuildDir}\\${name}" },
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
// Inherit the defaults for using the MSVC x64 compiler.
"inheritEnvironments": [ "msvc_x64" ],
"buildRoot": "${env.BuildDir}\\${name}"
}
]
}
在下一個範例中,x86-Debug 組態會針對 BuildDir 屬性定義其自身的值。 此值會覆寫全域 BuildDir 屬性設定的值,使 BuildRoot 的評估結果為 D:\custom-builddir\x86-Debug
。
{
"environments": [
{
"BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}",
}
],
"configurations": [
{
"name": "x86-Debug",
// The syntax for this property is the same as the global one above.
"environments": [
{
// Replace the global property entirely.
"BuildDir": "D:\\custom-builddir"
// This environment does not specify a namespace, hence by default "env" is assumed.
// "namespace" : "name" would require that this variable be referenced with "${name.BuildDir}".
}
],
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x86" ],
// Evaluates to "D:\custom-builddir\x86-Debug"
"buildRoot": "${env.BuildDir}\\${name}"
},
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64" ],
// Since this configuration doesn't modify BuildDir, it inherits
// from the one defined globally.
"buildRoot": "${env.BuildDir}\\${name}"
}
]
}
巨集
下列宏可用於 CMakeSettings.json
:
${workspaceRoot}
– 工作區資料夾的完整路徑${workspaceHash}
- 工作區位置的雜湊;適用於建立目前工作區的唯一識別碼 (例如用於資料夾路徑)${projectFile}
– 根CMakeLists.txt
檔案的完整路徑${projectDir}
– 包含根CMakeLists.txt
檔案的資料夾完整路徑${projectDirName}
– 包含根CMakeLists.txt
檔案的資料夾名稱${thisFile}
– 檔案的完整路徑CMakeSettings.json
${name}
- 組態的名稱${generator}
- 用於此組態之 CMake 產生器的名稱
中 CMakeSettings.json
宏和環境變數的所有參考都會展開,再傳遞至 CMake 命令列。
Ninja 命令列引數
如果未指定目標,Ninja 會建置「預設」目標。
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise>ninja -?
ninja: invalid option -- `-?'
usage: ninja [options] [targets...]
選項 | 描述 |
---|---|
--version |
列印忍者版本 (「1.7.1」) |
-C DIR |
在執行任何其他動作之前變更為 DIR |
-f FILE |
指定輸入組建檔案 (default= build.ninja ) |
-j N |
平行執行 N 作業 (default=14,衍生自可用的 CPU) |
-k N |
繼續工作直到 N 作業失敗 (default=1) |
-l N |
如果負載平均大於,請勿啟動新的作業 N |
-n |
試運行 (不執行命令,但運作方式就像成功一樣) |
-v |
建置時顯示所有命令列 |
-d MODE |
啟用偵錯 (用來 -d list 列出模式) |
-t TOOL |
執行子工具(用來 -t list 列出子工具)。 結束任何最上層選項;進一步旗標會傳遞至工具 |
-w FLAG |
調整警告(用來 -w list 列出警告) |