Sdílet prostřednictvím


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é .sln ani soubory .vcxproj; V případě potřeby můžete zadat vlastní úlohy a také vytvářet a spouštět parametry prostřednictvím jednoduchých .json souborů. 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 :

Rozevírací seznam Konfigurace na panelu nástrojů zobrazující výběr Spravovat konfigurace

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

Přidat konfiguraci do dialogového okna CppProperties se seznamem výchozích konfigurací: x86-Debug, x86-Release, x64-Debug, x64-Release atd.

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

{
  "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 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 ostatní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:

Snímek obrazovky s automaticky otevíranou obrazovkou IntelliSense GCC zobrazující dokumentaci k hlavičce

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.

Dialogové okno Možnosti zobrazující nastavení protokolování diagnostiky

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

Průzkumník řešení místní nabídka s příkazem Konfigurovat úkoly.

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ý tasks.vs.json soubor s jednou ú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 by se měl zobrazit nový soubor, hello.exe v Průzkumník řešení.

Můžete definovat mnoho druhů úkolů. Následující příklad ukazuje tasks.vs.json soubor , 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 CppProperties.json nebo CMakeSettings.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 .cpp souboru.

{
  "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 na libovolný .cpp soubor 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 najdete v tématu Tasks.vs.json referenční informace ke schématu.

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

Pokud chcete přizpůsobit argumenty příkazového řádku a pokyny pro ladění programu, klikněte pravým tlačítkem myši 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ří konfigurace spuštění 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 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:

Rozevírací seznam cíl ladění panelu nástrojů zobrazující zelenou šipku pro spuštění ladicího programu

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 tématu launch.vs.json referenční informace ke schématu.

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.