CppProperties.json
odniesienie
Otwórz projekty folderów, które nie używają narzędzia CMake, mogą przechowywać ustawienia konfiguracji projektu dla funkcji IntelliSense w CppProperties.json
pliku. (Projekty CMake używają CMakeSettings.json
pliku). Konfiguracja składa się z par nazwa/wartość i definiuje ścieżki #include, przełączniki kompilatora i inne parametry. Aby uzyskać więcej informacji na temat dodawania konfiguracji w projekcie Otwórz folder, zobacz Open Folder projects for C++(Otwieranie projektów folderów dla języka C++). W poniższych sekcjach podsumowano różne ustawienia. Aby uzyskać pełny opis schematu, przejdź do CppProperties_schema.json, której pełna ścieżka jest podana w górnej części edytora kodu po CppProperties.json
otwarciu.
Właściwości konfiguracji
Konfiguracja może mieć dowolną z następujących właściwości:
Nazwa/nazwisko | opis |
---|---|
inheritEnvironments |
Określa, które środowiska mają zastosowanie do tej konfiguracji. |
name |
Nazwa konfiguracji, która będzie wyświetlana na liście rozwijanej konfiguracji języka C++ |
includePath |
Rozdzielona przecinkami lista folderów, które powinny być określone w ścieżce dołączania (mapuje na /I większość kompilatorów) |
defines |
Lista makr, które należy zdefiniować (mapuje na /D większość kompilatorów) |
compilerSwitches |
Co najmniej jeden dodatkowy przełącznik, który może mieć wpływ na zachowanie funkcji IntelliSense |
forcedInclude |
Nagłówek do automatycznego dołączania do każdej jednostki kompilacji (mapuje na /FI MSVC lub -include clang) |
undefines |
Lista makr, które mają być niezdefiniowane (mapuje na /U MSVC) |
intelliSenseMode |
Aparat IntelliSense do użycia. Można określić jeden ze wstępnie zdefiniowanych wariantów architektury dla MSVC, gcc lub Clang. |
environments |
Zdefiniowane przez użytkownika zestawy zmiennych, które zachowują się jak zmienne środowiskowe w wierszu polecenia i są dostępne za pomocą makra ${env.VARIABLE} . |
Wartości funkcji IntelliSenseMode
Edytor kodu wyświetla dostępne opcje po rozpoczęciu pisania:
Ta lista zawiera obsługiwane wartości:
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
Uwaga: wartości msvc-x86
i msvc-x64
są obsługiwane tylko ze starszych powodów. windows-msvc-*
Zamiast tego użyj wariantów.
Wstępnie zdefiniowane środowiska
Program Visual Studio udostępnia następujące wstępnie zdefiniowane środowiska dla języka Microsoft C++, które są mapowane na odpowiedni wiersz polecenia dewelopera. Gdy dziedziczysz jedno z tych środowisk, możesz odwołać się do dowolnej ze zmiennych środowiskowych przy użyciu właściwości env
globalnej z tą składnią makr: ${env.VARIABLE}
.
Nazwa zmiennej | opis |
---|---|
vsdev |
Domyślne środowisko programu Visual Studio |
msvc_x86 |
Kompilowanie dla architektury x86 przy użyciu narzędzi x86 |
msvc_x64 |
Kompilowanie dla amd64 przy użyciu narzędzi 64-bitowych |
msvc_arm |
Kompilowanie dla usługi ARM przy użyciu narzędzi x86 |
msvc_arm64 |
Kompilowanie dla usługi ARM64 przy użyciu narzędzi x86 |
msvc_x86_x64 |
Kompilowanie dla amd64 przy użyciu narzędzi x86 |
msvc_arm_x64 |
Kompilowanie dla usługi ARM przy użyciu narzędzi 64-bitowych |
msvc_arm64_x64 |
Kompilowanie dla usługi ARM64 przy użyciu narzędzi 64-bitowych |
Po zainstalowaniu obciążenia systemu Linux dostępne są następujące środowiska przeznaczone zdalnie dla systemów Linux i WSL:
Nazwa zmiennej | opis |
---|---|
linux_x86 |
Docelowy system x86 Linux zdalnie |
linux_x64 |
Docelowy zdalnie x64 Linux |
linux_arm |
Zdalne określanie celu usługi ARM dla systemu Linux |
Środowiska zdefiniowane przez użytkownika
Opcjonalnie możesz użyć environments
właściwości , aby zdefiniować zestawy zmiennych w CppProperties.json
skali globalnej lub na konfigurację. Te zmienne zachowują się jak zmienne środowiskowe w kontekście projektu Otwórz folder. Dostęp do nich można uzyskać za pomocą ${env.VARIABLE}
składni z tasks.vs.json
i launch.vs.json
po ich zdefiniowaniu tutaj. Nie muszą one jednak być ustawiane jako rzeczywiste zmienne środowiskowe w żadnym wierszu polecenia używanym wewnętrznie przez program Visual Studio.
Program Visual Studio 2019 w wersji 16.4 lub nowszej: zmienne specyficzne dla konfiguracji zdefiniowane w programie CppProperties.json
są automatycznie pobierane przez obiekty docelowe i zadania debugowania bez konieczności ustawiania inheritEnvironments
. Obiekty docelowe debugowania są uruchamiane automatycznie przy użyciu środowiska określonego w pliku CppProperties.json
.
Program Visual Studio 2019 w wersji 16.3 lub starszej: w przypadku korzystania ze środowiska należy określić go we inheritsEnvironments
właściwości, nawet jeśli środowisko jest zdefiniowane jako część tej samej konfiguracji; environment
właściwość określa nazwę środowiska. Poniższy przykład przedstawia przykładową konfigurację włączania funkcji IntelliSense dla GCC w instalacji MSYS2. Zwróć uwagę, jak konfiguracja definiuje i dziedziczy mingw_64
środowisko oraz jak includePath
właściwość może uzyskiwać dostęp do zmiennej INCLUDE
.
"configurations": [
{
"inheritEnvironments": [
"mingw_64"
],
"name": "Mingw64",
"includePath ,": [
"${env.INCLUDE}",
"${workspaceRoot}\\**",
],
"intelliSenseMode": "linux-gcc-x64",
"environments": [
{
"MINGW64_ROOT": "C:\\msys64\\mingw64",
"BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "9.1.0",
"PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
"INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};",
"environment": "mingw_64"
}
]
}
]
Podczas definiowania "environments"
właściwości wewnątrz konfiguracji zastępuje wszystkie zmienne globalne, które mają te same nazwy.
Makra wbudowane
Masz dostęp do następujących wbudowanych makr wewnątrz CppProperties.json
programu :
Makro | opis |
---|---|
${workspaceRoot} |
Pełna ścieżka do folderu obszaru roboczego |
${projectRoot} |
Pełna ścieżka do folderu, w którym CppProperties.json znajduje się |
${env.vsInstallDir} |
Pełna ścieżka do folderu, w którym zainstalowano uruchomione wystąpienie programu Visual Studio |
Przykład
Jeśli projekt zawiera folder include, a także *windows.h
* i inne typowe nagłówki z zestawu Windows SDK, możesz zaktualizować CppProperties.json
plik konfiguracji przy użyciu następujących elementów:
{
"configurations": [
{
"name": "Windows",
"includePath": [
// local include folder
"${workspaceRoot}\\include",
// Windows SDK and CRT headers
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\ucrt",
"${env.NETFXSDKDir}\\include\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\shared",
"${env.VCToolsInstallDir}\\include"
]
}
]
}
Uwaga
%WindowsSdkDir%
i %VCToolsInstallDir%
nie są ustawiane jako globalne zmienne środowiskowe. Upewnij się, że rozpoczynasz od devenv.exe
wiersza polecenia dla deweloperów, który definiuje te zmienne. (Wpisz "developer" w menu Start systemu Windows, aby znaleźć skrót wiersza polecenia dla deweloperów).
Rozwiązywanie problemów z błędami funkcji IntelliSense
Jeśli nie widzisz oczekiwanej funkcji IntelliSense, możesz rozwiązać problemy, przechodząc do pozycji Narzędzia>Opcje>Edytor>tekstu C/C++>Advanced i ustawienie Włącz rejestrowanie na .true
Aby rozpocząć od, spróbuj ustawić poziom rejestrowania na 5, a filtry rejestrowania na 8.
Dane wyjściowe są przesyłane potokowo do okna danych wyjściowych i są widoczne po wybraniu pozycji Pokaż dane wyjściowe z: dziennik visual C++. Dane wyjściowe zawierają między innymi listę rzeczywistych ścieżek, których funkcja IntelliSense próbuje użyć. Jeśli ścieżki nie są zgodne z tymi w pliku CppProperties.json
, spróbuj zamknąć folder i usunąć .vs
podfolder zawierający buforowane dane przeglądania.
Aby rozwiązać problemy z błędami funkcji IntelliSense spowodowanymi brakiem ścieżek dołączania, otwórz kartę Lista błędów, a następnie przefiltruj dane wyjściowe tylko do funkcji IntelliSense i kod błędu E1696 "nie może otworzyć pliku źródłowego...".