在 Visual Studio 中使用 CMake 預設值設定和建置
CMake 支援兩個檔案,可讓使用者指定一般設定、建置和測試選項,並與其他人共用: CMakePresets.json
和 CMakeUserPresets.json
。 使用這些檔案在 Visual Studio 和 Visual Studio Code 中驅動 CMake、在持續整合 (CI) 管線中,以及從命令行。
CMakePresets.json
用於儲存整個項目的組建。 CMakeUserPresets.json
是讓開發人員儲存自己的本機組建。 Visual Studio 2019 16.10 版或更新版本支援這兩個檔案。
本文包含與Visual Studio整合的相關信息 CMakePresets.json
。 以下是實用的連結:
- 如需 格式
CMakePresets.json
的詳細資訊,請參閱官方 CMake 檔。 - 如需Microsoft廠商地圖和巨集擴充的詳細資訊,請參閱
CMakePresets.json
和CMakeUserPresets.json
Microsoft廠商地圖。 - 如需如何在 Visual Studio Code 中使用
CMakePresets.json
的詳細資訊,請參閱 使用 CMake 預設值設定和建置。
我們建議 CMakePresets.json
做為的 CMakeSettings.json
替代方案。 Visual Studio 永遠不會同時從 CMakePresets.json
和 CMakeSettings.json
讀取。 若要在 Visual Studio 中啟用或停用CMakePresets.json
整合,請參閱在 Visual Studio 2019 中啟用CMakePresets.json
。
支援的 CMake 和 CMakePresets.json
版本
支援的 CMakePresets.json
和 CMakeUserPresets.json
架構版本取決於您的 Visual Studio 版本:
- Visual Studio 2019 16.10 版和更新版本支持架構版本 2 和 3。
- Visual Studio 2022 17.4 版 Preview 1 新增架構第 4 版的支援。
- Visual Studio 2022 17.5 版 Preview 1 新增架構第 5 版的支援。
您可以變更 "version"
根物件中的欄位來更新版本。 如需範例和詳細資訊,請參閱 CMakePresets.json
格式。
當您從命令行叫用 CMakePresets.json
CMake 時,需要 CMake 3.20 版或更新版本。 不過,Visual Studio 會讀取和評估 CMakePresets.json
和 CMakeUserPresets.json
本身,而且不會直接使用 選項叫用 --preset
CMake。 因此,當您在 Visual Studio 內使用 建 CMakePresets.json
置時,不需要 CMake 3.20 版或更新版本。
我們建議至少使用 CMake 3.14 版或更新版本。
在 Visual Studio 中啟用 CMakePresets.json
整合
CMakePresets.json
Visual Studio 中預設不會啟用整合。 您可以在 [工具選項>] [CMake>一般]>中啟用它:
從 Visual Studio 2022 功能表到達此畫面:[工具] > [選項] > CMake > [一般]。 選項位於 CMake 設定檔區段底下。
重要
關閉並重新開啟 Visual Studio 中的資料夾,以啟用整合。
在某些舊版 Visual Studio 中,[工具>選項>] CMake>[一般] 只有單一選項可啟用CMakePresets.json
整合:
下表指出 CMakePresets.json
何時使用 而不是 CMakeSettings.json
驅動 CMake 設定,並在 Visual Studio 2022 和 Visual Studio 2019 16.10 版和更新版本中建置。 如果沒有組態檔存在,則會使用預設的設定預設值。
在表格中,「已啟用工具>選項」表示使用CMakePresets.json來驅動 CMake 設定、建置和測試,會在 [工具選項>] [CMake>一般]>中選取。
組態檔 | 已停用工具 > 選項 | 已啟用工具 > 選項 |
---|---|---|
沒有組態檔存在 | CMakeSettings.json |
CMakePresets.json |
CMakeSettings.json 目前 |
CMakeSettings.json |
CMakePresets.json |
CMakePresets.json 目前 |
CMakePresets.json |
CMakePresets.json |
這兩個組態檔都存在 | CMakePresets.json |
CMakePresets.json |
修改自動設定和快取通知
根據預設,Visual Studio 會在每次使用中目標系統或設定預設變更時自動叫 configure
用。 您可以在 [工具>選項>] CMake>[一般] 中選取 [永不自動執行設定] 步驟,以修改此行為。 您也可以清除 [顯示 CMake 快取通知] 來停用所有 CMake 快取通知(金條)。
預設設定預設值
如果不存在CMakePresets.json
或CMakeUserPresets.json
檔案存在,或CMakePresets.json
CMakeUserPresets.json
無效,Visual Studio 會回復下列預設的設定預設值:
Windows 範例
{
"name": "windows-default",
"displayName": "Windows x64 Debug",
"description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Windows" ]
}
}
},
Linux 範例
{
"name": "linux-default",
"displayName": "Linux Debug",
"description": "Sets Ninja generator, compilers, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Linux" ]
},
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
}
如果您嘗試開啟或修改 CMakePresets.json
不存在的檔案,Visual Studio 會自動在專案的根目錄建立 CMakePresets.json
具有預設設定預設值的檔案。
設定和建置
在 Visual Studio 工具列上,啟用整合時 CMakePresets.json
,[目標系統]、[設定預設] 和 [建置預設] 下拉式清單:
選取目標系統
左側的下拉式清單表示使用 中的目標系統。 這是叫用 CMake 來設定和建置項目的系統。 此下拉式清單包含您的本機計算機、依主機名 連線管理員 中的所有 SSH 連線,以及 Visual Studio 可找到的所有 Windows 子系統 Linux 版 (WSL) 安裝:
下拉式清單包含數個專案,包括本機計算機、ip 位址 192.168.0.5、WSL:ubuntu2004、WSL:debian 及管理連線。
在前述範例中:
- 192.168.0.5是已新增至 連線管理員的遠端 Linux 系統。
- ubuntu2004 和 debian 是 WSL 安裝。
選取 [管理連線] 以開啟 連線管理員。
選取 [設定預設]
中間的下拉式清單表示使用 中的 [設定預設]。 這是 configurePreset
叫用 CMake 來產生專案建置系統時所使用的值。 此下拉式清單包含和CMakeUserPresets.json
中CMakePresets.json
定義的非隱藏設定預設值聯集。
Visual Studio 會使用 Microsoft Visual Studio 設定廠商對應中的 值 hostOS
,來隱藏未套用至使用中目標系統的設定預設值。 如需詳細資訊,請參閱Visual Studio 設定廠商對應下表格中的專案hostOS
。
選取 [管理組態 ] 以開啟 CMakePresets.json
位於專案根目錄的檔案。 CMakePresets.json
如果尚未存在,則會建立它。
選取建置預設
右側的下拉式清單會指出使用 中的 [建置預設]。 這是 buildPreset
叫用 CMake 來建置專案時所使用的值。 此下拉式清單包含和CMakeUserPresets.json
中CMakePresets.json
定義的非隱藏組建預設聯集。
所有建置預設值都必須指定相關聯的 configurePreset
值。 Visual Studio 會隱藏不適用於使用中設定預設的組建預設。 如需詳細資訊,請參閱 建置預設清單。
如果沒有與使用中 [設定預設] 相關聯的 [建置預設],Visual Studio 會列出預設的 [建置預設]。 預設的 [建置預設] 相當於從命令行傳遞 cmake --build
沒有其他自變數。
設定
Visual Studio 會在偵測到 CMake 快取過期時自動嘗試設定專案。 若要手動叫用設定,請從主功能表中選取 [項目>設定<專案名稱]。> 這與從命令行執行 cmake --preset <configurePreset>
相同,其中 <configurePreset>
是使用中設定預設的名稱。
若要停用自動快取產生,請參閱 自動設定和快取通知。
建立
若要建置整個專案,請從主功能表中選取 [全部建>置]。 這與從命令行執行 cmake --build --preset <buildPreset>
相同,其中 <buildPreset>
是使用中組建預設的名稱。
若要建置單一目標,請切換至 方案總管 中的 CMake 目標檢視。 然後以滑鼠右鍵按下任何目標,然後從快捷方式功能表中選取 [ 建 置]。
注意
Visual Studio 2019 不支援 buildPresets.targets
建置 中所 CMakePresets.json
指定目標子集的選項。
執行 CTest
CMakePresets.json
支援 Visual Studio 2019 中的兩個功能表選項:
- >專案名稱>的測試<執行 CTest 會叫用 CTest,並執行與使用中設定預設和建置預設相關聯的所有測試,而沒有傳遞至 CTest 的其他自變數。
- test>Run Test Preset for <configurePreset> expands to show all Test Presets associated with the active Configure Preset. 選取單一測試預設與從命令行執行
ctest --preset <testPreset>
相同,其中<testPreset>
是所選測試預設的名稱。 如果未針對使用中設定預設定義任何測試預設值,則無法使用此選項。
在Visual Studio 2019中,測試總管未與 CMakePresets.json
整合。
新增預設
在 Visual Studio 2019 中,所有命令和預設範本都會修改 CMakePresets.json
。 您可以直接編輯 CMakeUserPresets.json
來新增用戶層級預設。
針對和CMakeUserPresets.json
中的CMakePresets.json
路徑使用正斜線 (/
)。
新增設定預設值
若要將新的 [設定預設值] 新增至 CMakePresets.json
,請從 方案總管 [資料夾檢視] 按下滑鼠右鍵CMakePresets.json
,然後從快捷方式功能選取 [新增組態]。 選取 [設定預設] 樣本的對話框隨即出現:
選取 Windows x64 偵錯 範本,以在 Windows 系統上設定。 選取 Linux 偵錯 範本,以在 WSL 和遠端 Linux 系統上設定。 如需編輯 CMakePresets.json
的詳細資訊,請參閱 編輯預設值。
如果選取的範本存在,則會新增至 CMakePresets.json
該範本。 否則,範本會複製到新的 CMakePresets.json
檔案中。
新增組建預設和測試預設
Visual Studio 2019 不提供新組建預設和測試預設的範本。 您可以直接編輯 CMakePresets.json
來新增 [建置預設] 和 [測試預設]。 如需詳細資訊,請參閱建置預設清單、測試預設清單或範例CMakePresets.json
檔案。
編輯預設
官方 CMake 檔 是編輯設定預設、建置預設和測試預設的最佳資源。 下列資訊是 CMake 檔的子集,特別與 Visual Studio 開發人員相關。
選取您的編譯程式
您可以在 [設定預設值] 中使用 cacheVariables.CMAKE_C_COMPILER
和 cacheVariables.CMAKE_CXX_COMPILER
來設定 C 和 C++ 編譯程式。 這相當於從命令行傳遞 -D CMAKE_C_COMPILER=<value>
和 -D CMAKE_CXX_COMPILER=<value>
傳遞至 CMake。 如需詳細資訊,請參閱CMAKE_<LANG>_COMPILER
。
使用下列範例來建置 Visual Studio 中的 cl.exe
與 clang-cl.exe
。 您必須安裝適用於 Windows 元件的 C++ Clang 工具,才能使用 clang-cl
進行建置。
使用 建置 cl.exe
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl"
},
使用 建置 clang
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
如果您使用 Visual Studio 16 2019
或 Visual Studio 17 2022
作為產生器,您可以使用 [ toolset
設定預設] 來指定 ClangCL
工具組:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
},
"toolset": "ClangCL",
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
如需支援 toolset
規格之產生器的詳細資訊,請參閱 CMAKE_GENERATOR_TOOLSET
CMake 檔中的 。
重要
在 Visual Studio 2019 中,當您使用 或 clang-cl
建置clang
時,必須明確指定 Clang IntelliSense 模式。
若要在 Visual Studio 外部重現這些組建,請參閱 從命令行或 CI 管線執行 CMake。
若要在Linux上建置,或不使用Visual C++ 工具組,請在實例 PATH
上指定編譯程式的名稱,或評估為編譯程式完整路徑的環境變數。 不建議使用完整路徑,讓檔案可以保持可共用。 使用 GCC 第 8 版建置的預設值可能如下所示:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "gcc-8",
"CMAKE_CXX_COMPILER": "g++-8"
},
您也可以使用 CMake 工具鏈檔案來設定編譯程式。 工具鏈檔案可以使用 來設定 cacheVariables.CMAKE_TOOLCHAIN_FILE
,這相當於從命令行傳遞 -D CMAKE_TOOLCHAIN_FILE=<value>
至 CMake。 CMake 工具鏈檔案最常用於交叉編譯。 如需撰寫 CMake 工具鏈檔案的詳細資訊,請參閱 CMake 工具鏈。
選取您的產生器
Windows 和 Linux 設定預設範本都會將 Ninja 指定為預設產生器。 其他常見的產生器是 Windows 上的 Visual Studio 產生器 ,Linux 和 macOS 上的 Unix Makefiles。 您可以使用 [設定預設] 中的 選項來指定新的產生器 generator
。 這相當於從命令行傳遞 -G
至 CMake。
當您使用 Visual Studio 產生器建置時,請將 和 toolset.strategy
設定architecture.strategy
為 set
。 如需詳細資訊,請參閱 CMake 產生器。
選取您的組態類型
您可以使用 來設定單一組態產生器的cacheVariables.CMAKE_BUILD_TYPE
組態類型 (Debug
或 Release
)。 這相當於從命令行傳遞 -D CMAKE_BUILD_TYPE=<value>
至 CMake。 如需詳細資訊,請參閱CMAKE_BUILD_TYPE
。
使用 Visual C++ 工具組建置時,選取您的目標和主機架構
您可以使用 來設定目標架構 (x64、Win32、ARM64 或 ARM)。architecture.value
這相當於從命令行傳遞 -A
至 CMake。 如需詳細資訊,請參閱 平臺選取。
注意
目前,Visual Studio 產生器預期 Win32 語法和命令行產生器(例如 Ninja)在建置 x86 時需要 x86 語法。
您可以使用 來設定主機架構 (x64 或 x86) 和工具組 toolset.value
。 這相當於從命令行傳遞 -T
至 CMake。 如需詳細資訊,請參閱 工具組選取。
architecture.strategy
和 toolset.strategy
值會告知 CMake 如何處理架構和工具組欄位。 set
表示 CMake 會設定個別的值,而 external
表示 CMake 不會設定個別的值。
我們建議搭配 IDE 產生器使用 set
,例如 Visual Studio 產生器。 與命令行產生器搭配使用 external
,例如 Ninja。 這些值可讓 Visual Studio 等廠商在叫用 CMake 之前提供必要的環境。 如需架構和工具組欄位的詳細資訊,請參閱設定 預設清單。
如果您不想建立環境的來源,您可以將 設定architecture.strategy
為 external
和 architecture.value
。unspecified
您可能會發現,基於下列任何一個原因,不要為環境提供來源會很有用:
- 您使用 MSVC 以外的工具組。
- 您可以使用自訂工具鏈,例如內嵌案例。
- 您不需要特定環境來建置。
如需支援架構欄位之 IDE 產生器的完整清單,請參閱 CMAKE_GENERATOR_PLATFORM
。 如需支援工具組欄位之 IDE 產生器的完整清單,請參閱 CMAKE_GENERATOR_TOOLSET
。
使用下列範例以 Arm64 與 Ninja 產生器為目標,或以 Visual Studio 16 2019 產生器為目標 Win32 (x86):
"generator": "Ninja",
"architecture": {
"strategy": "external",
"value": "arm64"
},
"generator": "Visual Studio 16 2019",
"architecture": {
"strategy": "set",
"value": "Win32"
},
設定和參考環境變數
您可以使用環境對應來設定環境變數。 環境變數會透過 inherits
欄位繼承,但您可以視需要覆寫它們。
默認的環境是本身環境的聯集,以及來自其所有父系的環境。 如果多個 inherits
預設提供相同變數的衝突值,則建議使用清單中的先前預設值 inherits
。 您可以將變數設定為 null
,以取消設定繼承自另一個預設的變數。
在 [設定預設] 中設定的環境變數也會自動流向相關聯的建置預設和測試預設,除非 inheritConfigureEnvironment
設定為 false
。 如需詳細資訊,請參閱設定 預設值的清單。
您可以使用和 $penv{<variable-name>}
語法來參考環境變數$env{<variable-name>}
。 如需詳細資訊,請參閱 巨集擴充。
設定跨編譯程式的 IntelliSense
根據預設,Visual Studio 會使用符合您指定工具組和目標架構的 IntelliSense 模式。 如果您要交叉編譯,您可能需要使用 intelliSenseMode
Visual Studio 設定廠商對應中的 選項,手動指定正確的 IntelliSense 模式。 如需詳細資訊,請參閱Visual Studio 設定廠商對應下表格中的專案intelliSenseMode
。
在遠端系統或 Windows 子系統 Linux 版 上設定和建置
透過 CMakePresets.json
Visual Studio 中的支援,您可以輕鬆地在 Windows、WSL 和遠端系統上設定和建置專案。 在 Windows、遠端系統或 WSL 上設定和建置 專案的步驟相同。 不過,一些行為是遠端開發特有的。
${sourceDir}
遠端複製案例中的行為
在本機案例中,評估 ${sourceDir}
為 Visual Studio 中開啟的專案來源目錄路徑。 在遠端複製案例中, ${sourceDir}
評估為目標系統上的專案來源目錄路徑,而不是本機計算機上的專案來源目錄。
Visual Studio 遠端設定廠商對應中的 值 sourceDir
會決定目標系統上的專案來源目錄(預設值為 $env{HOME}/.vs/$ms{projectDirName}
)。 如需詳細資訊,請參閱Visual Studio 設定廠商對應下表格中的專案sourceDir
。
遠端輸出的本機資料夾
如果 copyBuildOutput
Visual Studio 遠端設定廠商對應設定 true
為 ,遠端複製案例需要本機目錄來複製一些遠端檔案,例如 CMake 檔案 API 回應檔或建置檔案。 這些檔案會自動複製到 <local-source-directory>/out/<remote-connection-ID>/build/${presetName}
。
在 Windows 和 WSL1 上叫用相同的設定預設值
如果您嘗試在 Windows 和 WSL1 上使用相同的設定預設值,就會看到錯誤。 Windows 和 WSL1 都使用 Windows 文件系統,因此 CMake 會嘗試針對 Windows 和 WSL1 建置樹狀結構使用相同的輸出目錄 (binaryDir
)。
如果您想要搭配 Windows 和 WSL1 工具組使用相同的設定預設,請建立繼承自原始預設的第二個設定預設值,並指定新的 binaryDir
值。 在下列範例中, windows-preset
可以在 Windows 上使用,而且 base-preset
可以在 WSL1 上使用:
{
"name": "windows-preset",
"inherits": "base-preset",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": "Windows"
}
}
}
注意
在 Visual Studio 2019 中,僅支援 WSL1 工具組。 您可以隨時在 Windows 和 WSL 上叫 configure
用此行為。
啟用 vcpkg 整合
Vcpkg 可協助您管理 Windows、Linux 和 macOS 上的 C 和 C++ 連結庫。 vcpkg 工具鏈檔案 (vcpkg.cmake
) 必須傳遞至 CMake,才能啟用 vcpkg 整合。 如需詳細資訊,請參閱 vcpkg 檔。
Visual Studio 不再會在啟用整合時 CMakePresets.json
自動將 vcpkg 工具鏈檔案傳遞至 CMake。 這項變更可排除 Visual Studio 特定的行為,並確保您可以從命令行重現組建。
請改用 VCPKG_ROOT
中的CMakePresets.json
環境變數,將 路徑設定為 vcpkg.cmake
:
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": {
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"type": "FILEPATH"
}
},
VCPKG_ROOT
應該設定為 vcpkg 安裝的根目錄。 如需詳細資訊,請參閱 vcpkg 環境變數。
如果您已經使用 CMake 工具鏈檔案並想要啟用 vcpkg 整合,請參閱 使用多個工具鏈檔案。 請遵循這些指示,使用 vcpkg 搭配專案使用外部工具鏈檔案。
和中的 launch.vs.json
變數替代 tasks.vs.json
CMakePresets.json
支援和tasks.vs.json
中的launch.vs.json
變數替代。 以下是一些考量:
使用中 [設定預設] 中設定的環境變數會自動流向
launch.vs.json
和tasks.vs.json
設定。 您可以在 取消launch.vs.json
tasks.vs.json
設定個別環境變數,方法是將其設定為null
。 下列範例會將 中的launch.vs.json
變數DEBUG_LOGGING_LEVEL
設定為null
:"env": { "DEBUG_LOGGING_LEVEL": null }
。使用中 [設定預設] 中所設定的索引鍵值可用於 和
launch.vs.json
tasks.vs.json
語法${cmake.<KEY-NAME>}
。 例如,使用${cmake.binaryDir}
來參考使用中設定預設的輸出目錄。使用中 [設定預設] 環境對應中設定的個別環境變數,可透過語法
${env.<VARIABLE-NAME>}
在 和tasks.vs.json
中使用launch.vs.json
。
將和 launch.vs.json
task.vs.json
檔案更新為參考 CMakePresets.json
語法, CMakeSettings.json
而不是語法。 當現用組態檔為現用組態檔時CMakePresets.json
,參考舊CMakeSettings.json
語法的巨集會在未來版本中進行淘汰。 例如,使用 來參考使用中設定預設 ${cmake.binaryDir}
的輸出目錄, ${cmake.buildRoot}
而不是 ,因為 CMakePresets.json
會使用 binaryDir
語法。
疑難排解
如果事情未如預期般運作,您可以嘗試幾個疑難解答步驟。
CMakePresets.json
如果 或 CMakeUserPresets.json
無效,Visual Studio 會回復其默認行為,並只顯示預設的設定預設值。 Visual Studio IntelliSense 可協助您擷取其中許多 JSON 錯誤,但不知道您是否以或configurePreset
錯誤名稱參考預設inherits
。
若要檢查您的預設檔案是否有效,請從項目目錄根目錄的命令行執行 cmake --list-presets
。 (需要 CMake 3.20 或更新版本。如果其中一個檔案無效,您會看到下列錯誤:
CMake Error: Could not read presets from
C:/Users/<user>/source/repos/<project-name>: JSON parse error
其他疑難解答步驟包括:
- 刪除快取並重新設定專案(CMake:刪除快取和專案設定<專案>名稱)。>
- 關閉並重新開啟 Visual Studio 中的資料夾(檔案>關閉資料夾)。
.vs
刪除專案根目錄的資料夾。
如果您發現問題,最好的報告方式是選取 Visual Studio 右上角的 [傳送意見反應 ] 按鈕。
啟用遠端連線的記錄功能
如果您在連線或將檔案複製到遠端系統時遇到問題,您可以啟用遠端連線的記錄功能。 如需詳細資訊,請參閱 遠端連線的記錄。
啟用適用於 Windows 和 Linux 的 AddressSanitizer
Visual Studio 支援適用於 Windows 和 Linux 開發的 AddressSanitizer (ASAN),C 和C++運行時間記憶體錯誤偵測器。 addressSanitizerEnabled
中的 CMakeSettings.json
選項會啟用 AddressSanitizer。 CMakePresets.json
不支援此行為。
相反地,請自行設定必要的編譯程式和鏈接器旗標,以啟用和停用 AddressSanitizer。 設定它們會移除 Visual Studio 特定的行為,並確保相同的 CMakePresets.json
檔案可以從命令行重現您的組建。
您可以將下列範例新增至 , CMakeLists.txt
以啟用或停用目標的 AddressSanitizer:
option(ASAN_ENABLED "Build this target with AddressSanitizer" ON)
if(ASAN_ENABLED)
if(MSVC)
target_compile_options(<target> PUBLIC /fsanitize=address)
else()
target_compile_options(<target> PUBLIC -fsanitize=address <additional-options>)
target_link_options(<target> PUBLIC -fsanitize=address)
endif()
endif()
元件 <additional-options>
會列出其他編譯旗標,例如 "-fno-omit-frame-pointer"
。 如需適用於Linux的AddressSanitizer的詳細資訊,請參閱 使用AddressSanitizer。 如需搭配 MSVC 使用 AddressSanitizer 的詳細資訊,請參閱 從開發人員命令提示字元使用 AddressSanitizer。
使用 ASAN_OPTIONS
中的 launch.vs.json
欄位,將運行時間旗標傳遞至 AddressSanitizer。 ASAN_OPTIONS
detect_leaks=0
當 Visual Studio 中不支援 LeakSanitizer,因此未指定其他運行時間選項時,預設為 。
從命令行或 CI 管線執行 CMake
您可以使用相同的 CMakePresets.json
和 CMakeUserPresets.json
檔案,從 Visual Studio 和命令行叫用 CMake。 CMake 和 CTest 檔是使用 叫用 --preset
CMake 和 CTest 的最佳資源。 需要 CMake 3.20 版或更新版本。
在 Windows 上使用命令行產生器建置時,採購環境
在使用命令行產生器建置 CMake 之前,用戶必須先設定環境。 如果您要在 Windows 上使用 Ninja 和 Visual C++ 工具組進行建置,請在呼叫 CMake 以產生建置系統之前設定環境。 您可以使用 自變數呼叫 vcvarsall.bat
architecture
來執行此動作。 自 architecture
變數會指定要使用的主機和目標架構。 如需詳細資訊,請參閱 vcvarsall
語法。 如果您使用 Visual Studio 產生器在 Linux 或 Windows 上建置,就不需要執行此步驟。
當 IDE 叫用 CMake 時,Visual Studio 會為您採取的步驟相同。 Visual Studio 會剖析 和 所toolset
architecture
指定主機和目標架構的作用中設定預設值。 Visual Studio 接著會從 vcvarsall.bat
產生指定的環境。 當您使用 Ninja 從 Windows 命令行建置時,您必須自行執行此步驟。
vcvarsall.bat
會隨 Visual Studio 的 Build Tools 一起安裝。 根據預設, vcvarsall.bat
會安裝在 C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build
中。 如果您經常使用命令列工作流程,可以新增 vcvarsall.bat
至 PATH
。
命令行工作流程範例
您可以使用下列命令來設定及建置使用 Ninja 以 ARM64 搭配 x64 建置工具的 CMake 專案。 需要 CMake 3.20 版或更新版本。 從檔案 CMakePresets.json
所在的目錄執行下列命令:
/path/to/vcvarsall.bat x64_arm64
cmake --list-presets=all .
cmake --preset <configurePreset-name>
cmake --build --preset <buildPreset-name>
範例 CMakePresets.json
檔案
CMakePresets.json
box2d-lite 中的檔案包含設定預設、建置預設和測試預設的範例。 如需此範例的詳細資訊,請參閱簡報 configurePresets
。
下一步
在 Visual Studio 中深入了解設定和偵錯 CMake 專案:
CMake Projects in Visual Studio (Visual Studio 中的 CMake 專案)
自訂 CMake 建置設定
設定 CMake 偵錯工作階段
CMake 預先定義組態參考