Podpora open folder pro systémy sestavení C++ v sadě Visual Studio

Funkce Otevřít složku je dostupná v sadě Visual Studio 2017 a novějších verzích.

V sadě Visual Studio 2017 a novějších vám funkce Otevřít složku umožňuje otevřít složku zdrojových souborů a okamžitě začít psát kód s podporou technologie IntelliSense, procházení, refaktoringu, ladění atd. Při úpravách, vytváření, přesouvání nebo odstraňování souborů sada Visual Studio sleduje změny automaticky a průběžně aktualizuje index IntelliSense. Nejsou načteny žádné soubory .sln nebo .vcxproj; V případě potřeby můžete zadat vlastní úlohy a také sestavit a spustit parametry prostřednictvím jednoduchých souborů .json. Tato funkce umožňuje integrovat jakýkoli buildový systém třetích stran do sady Visual Studio. Obecné informace o open folder naleznete v tématu Vývoj kódu v sadě Visual Studio bez projektů nebo řešení.

CMake a Qt

CMake je integrovaný v integrovaném vývojovém prostředí sady Visual Studio jako součást desktopové úlohy C++. Pracovní postup pro CMake není stejný jako pracovní postup popsaný v tomto článku. Pokud používáte CMake, podívejte se na projekty CMake v sadě Visual Studio. CMake můžete také použít k sestavení projektů Qt nebo můžete použít rozšíření Qt Visual Studio pro Visual Studio 2015 nebo Visual Studio 2017.

Další systémy sestavení

Pokud chcete použít integrované vývojové prostředí sady Visual Studio se systémem sestavení nebo sadou nástrojů kompilátoru, která není přímo podporována v hlavní nabídce, vyberte Soubor | Otevřít | Složku nebo stiskněte kombinaci kláves Ctrl+Shift+Alt+O. Přejděte do složky, která obsahuje soubory zdrojového kódu. Pokud chcete sestavit projekt, nakonfigurujte IntelliSense a nastavte parametry ladění, přidejte tři soubory JSON:

Soubor Popis
CppProperties.json Zadejte vlastní informace o konfiguraci pro procházení. V případě potřeby vytvořte tento soubor ve složce kořenového projektu. (Nepoužívá se v projektech CMake.)
tasks.vs.json Zadejte vlastní příkazy sestavení. Přístup prostřednictvím položky místní nabídky Průzkumník řešení Konfigurovat úkoly.
launch.vs.json Zadejte argumenty příkazového řádku pro ladicí program. Přístup prostřednictvím položky místní nabídky Průzkumník řešení Ladění a spuštění Nastavení.

Konfigurace navigace v kódu pomocí CppProperties.json

Aby funkce IntelliSense a procházení, jako je například Přejít k definici , fungovala správně, musí Visual Studio vědět, který kompilátor používáte, kde jsou záhlaví systému a kde se nacházejí všechny další soubory zahrnutí, pokud nejsou přímo ve složce, kterou jste otevřeli (složka pracovního prostoru). Pokud chcete zadat konfiguraci, můžete v rozevíracím seznamu na hlavním panelu nástrojů zvolit Spravovat konfigurace :

Configuration dropdown on the toolbar showing the Manage configurations selection.

Visual Studio nabízí následující výchozí konfigurace:

Add Configuration to CppProperties dialog, showing list of Default configurations: x86-Debug, x86-Release, x64-Debug, x64-Release, and so on.

Pokud například zvolíte x64-Debug, Visual Studio vytvoří v kořenové složce projektu soubor S názvem CppProperties.json :

{
  "configurations": [
    {
      "inheritEnvironments": [
        "msvc_x64"
      ],
      "name": "x64-Debug",
      "includePath": [
        "${env.INCLUDE}",
        "${workspaceRoot}\\**"
      ],
      "defines": [
        "WIN32",
        "_DEBUG",
        "UNICODE",
        "_UNICODE"
      ],
      "intelliSenseMode": "windows-msvc-x64"
    }
  ]
}

Tato konfigurace dědí proměnné prostředí příkazového řádku pro vývojáře sady Visual Studio x64. Jednou z těchto proměnných je INCLUDE a můžete na ni odkazovat pomocí ${env.INCLUDE} makra. Tato includePath vlastnost hlásí sadě Visual Studio, kde hledat všechny zdroje, které potřebuje pro IntelliSense. V tomto případě se zobrazí zpráva "Look in the all the directories specified by the INCLUDE environment variable, and also all the directories in the current working folder tree." (Podívejte se do všech adresářů určených proměnnou prostředí INCLUDE a také všechny adresáře v aktuálním stromu pracovních složek. Vlastnost name je název, který se zobrazí v rozevíracím seznamu a může být cokoli, co se vám líbí. Vlastnost defines poskytuje nápovědu pro IntelliSense, když narazí na bloky podmíněné kompilace. Vlastnost intelliSenseMode poskytuje několik dalších tipů na základě typu kompilátoru. Pro MSVC, GCC a Clang je k dispozici několik možností.

Poznámka:

Pokud se zdá, že Visual Studio ignoruje nastavení v souboru CppProperties.json, zkuste přidat výjimku do souboru .gitignore takto: !/CppProperties.json.

Výchozí konfigurace pro MinGW-w64

Pokud přidáte konfiguraci MinGW-W64, json vypadá takto:

{
  "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.BIN_ROOT};${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"
        }
      ]
    }
  ]
}

Všimněte si environments bloku. Definuje vlastnosti, které se chovají jako proměnné prostředí a jsou k dispozici nejen v souboru CppProperties.json , ale také v dalších konfiguračních souborech task.vs.json a launch.vs.json. Konfigurace Mingw64 dědí mingw_w64 prostředí a používá jeho INCLUDE vlastnost k určení hodnoty pro includePath. Podle potřeby můžete k této vlastnosti pole přidat další cesty.

Vlastnost intelliSenseMode je nastavena na hodnotu odpovídající GCC. Další informace o všech těchto vlastnostech naleznete v tématu Referenční informace ke schématu CppProperties.

Když všechno funguje správně, při najetí myší na typ se zobrazí IntelliSense z hlaviček GCC:

Screenshot of a GCC IntelliSense pop-up showing the header documentation.

Povolení diagnostiky IntelliSense

Pokud nevidíte technologii IntelliSense, kterou očekáváte, můžete řešit potíže tak, že přejdete na Možnosti textového editoru>nástrojů>>C/C++>Advanced a nastavíte povolit protokolování do .true Začněte tím, že zkusíte nastavit úroveň protokolování na 5 a filtry protokolování na 8.

Options dialog, showing the Diagnostic logging settings.

Výstup se předá do okna Výstup a je viditelný, když zvolíte *Zobrazit výstup z: Protokol Visual C++. Výstup obsahuje mimo jiné seznam skutečných cest zahrnutí, které se IntelliSense pokouší použít. Pokud se cesty neshodují s cestami v souboru CppProperties.json, zkuste zavřít složku a odstranit podsložku .vs , která obsahuje data procházení v mezipaměti.

Definování úloh sestavení pomocí tasks.vs.json

Skripty sestavení nebo jakékoli jiné externí operace se soubory, které máte v aktuálním pracovním prostoru, můžete automatizovat tak, že je spustíte jako úkoly přímo v integrovaném vývojovém prostředí( IDE). Nový úkol můžete nakonfigurovat tak, že kliknete pravým tlačítkem na soubor nebo složku a vyberete Konfigurovat úkoly.

Solution Explorer shortcut menu showing the Configure Tasks command.

Tím se vytvoří (nebo otevře) soubor tasks.vs.json ve složce .vs, kterou Visual Studio vytvoří ve složce kořenového projektu. V tomto souboru můžete definovat libovolnou úlohu a pak ji vyvolat z místní nabídky Průzkumník řešení. Pokud chcete pokračovat v příkladu GCC, následující fragment kódu ukazuje úplný soubor tasks.vs.json s jedinou úlohou, která vyvolá g++.exe k sestavení projektu. Předpokládejme, že projekt obsahuje jeden soubor s názvem hello.cpp.

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskLabel": "build hello",
      "appliesTo": "/",
      "type": "default",
      "command": "g++",
      "args": [
        "-g",
        "-o",
        "hello",
        "hello.cpp"
      ]
    }
  ]
}

Soubor JSON se umístí do podsložky .vs . Chcete-li zobrazit složku, klikněte na tlačítko Zobrazit všechny soubory v horní části Průzkumník řešení. Tuto úlohu můžete spustit tak, že kliknete pravým tlačítkem na kořenový uzel v Průzkumník řešení a zvolíte build hello. Po dokončení úkolu byste měli vidět nový soubor hello.exe v Průzkumník řešení.

Můžete definovat mnoho druhů úkolů. Následující příklad ukazuje soubor tasks.vs.json, který definuje jeden úkol. taskLabel definuje název, který se zobrazí v místní nabídce. appliesTo definuje, na kterých souborech lze příkaz provést. Vlastnost command odkazuje na proměnnou prostředí COMSPEC, která identifikuje cestu konzoly (cmd.exe ve Windows). Můžete také odkazovat na proměnné prostředí deklarované v souboru CppProperties.json nebo CMake Nastavení.json. Vlastnost args určuje příkazový řádek, který se má vyvolat. Makro ${file} načte vybraný soubor v Průzkumník řešení. Následující příklad zobrazí název souboru aktuálně vybraného souboru .cpp.

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskLabel": "Echo filename",
      "appliesTo": "*.cpp",
      "type": "command",
      "command": "${env.COMSPEC}",
      "args": ["echo ${file}"]
    }
  ]
}

Po uložení tasks.vs.json můžete kliknout pravým tlačítkem myši na libovolný soubor .cpp ve složce, zvolit název souboru Echo z místní nabídky a zobrazit název souboru zobrazený v okně Výstup.

Další informace naleznete v tématu Tasks.vs.json schema reference.

Konfigurace parametrů ladění pomocí launch.vs.json

Pokud chcete přizpůsobit argumenty příkazového řádku programu a pokyny pro ladění, klikněte pravým tlačítkem na spustitelný soubor v Průzkumník řešení a vyberte Ladit a Spustit Nastavení. Tím se otevře existující soubor launch.vs.json nebo pokud žádný neexistuje, vytvoří se nový soubor se sadou minimálních nastavení spuštění. Nejdřív máte na výběr, jaký druh ladicí relace chcete nakonfigurovat. Pro ladění projektu MinGw-w64 zvolíme spuštění C/C++ pro MinGW/Cygwin (gdb). Tím se vytvoří spouštěcí konfigurace pro použití gdb.exe s některými informovanými odhady o výchozích hodnotách. Jednou z těchto výchozích hodnot je MINGW_PREFIX. Můžete nahradit literálovou cestu (jak je znázorněno níže) nebo můžete definovat MINGW_PREFIX vlastnost v souboru CppProperties.json:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "hello.exe",
      "project": "hello.exe",
      "cwd": "${workspaceRoot}",
      "program": "${debugInfo.target}",
      "MIMode": "gdb",
      "miDebuggerPath": "c:\\msys64\\usr\\bin\\gdb.exe",
      "externalConsole": true
    }
  ]
}

Ladění spustíte tak, že v rozevíracím seznamu ladění vyberete spustitelný soubor a potom kliknete na zelenou šipku:

Toolbar debug target dropdown, showing the green arrow to start the debugger.

Měli byste vidět dialogové okno Inicializace ladicího programu a pak okno externí konzoly, ve kterém je spuštěn program.

Další informace najdete v referenčních informacích ke schématu launch.vs.json.

Spouštění jiných spustitelných souborů

Můžete definovat nastavení spuštění pro jakýkoli spustitelný soubor v počítači. Následující příklad spustí 7za a určuje další argumenty jejich přidáním do args pole JSON:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CPP\\7zip\\Bundles\\Alone\\O\\7za.exe",
      "name": "7za.exe list content of helloworld.zip",
      "args": [ "l", "d:\\sources\\helloworld.zip" ]
    }
  ]
}

Když tento soubor uložíte, zobrazí se nová konfigurace v rozevíracím seznamu Cíl ladění a můžete ji vybrat a spustit ladicí program. Pro libovolný počet spustitelných souborů můžete vytvořit libovolný počet konfigurací ladění. Pokud teď stisknete klávesu F5 , ladicí program se spustí a dosáhne jakékoli zarážky, kterou jste už možná nastavili. Všechna známá okna ladicího programu a jejich funkce jsou nyní k dispozici.