Udostępnij za pośrednictwem


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:

Zrzut ekranu przedstawiający wyskakujące okienko Funkcji IntelliSense w edytorze.

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.jsonprogramu :

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.

Zrzut ekranu przedstawiający ustawienia rejestrowania diagnostycznego w oknie dialogowym Opcje.

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...".