Installiamo MinGW e creiamo un primo progetto C++ in Visual Studio Code

Installiamo MinGW e creiamo un primo progetto C++ in Visual Studio Code

In questo articolo vedremo come installare un compilatore per il linguaggio C e C++ in ambiente Windows (in particolare utilizzeremo un porting del c

Installare Ruby su Ubuntu
Come dimensionare l’Heap Size di un’applicazione Java
Jena: un framework per il Semantic Web per Java

In questo articolo vedremo come installare un compilatore per il linguaggio C e C++ in ambiente Windows (in particolare utilizzeremo un porting del compilatore GCC di Linux denominato MinGW) e creeremo un esempio di progetto C/C++ in Visual Studio Code.

I software che andremo ad installare ed utilizzare (MinGW e Visual Studio Code) sono Open Source e rappresentano un’alternativa completamente gratuita al ben più costoso Microsoft Visual Studio (ciò vale se ci riferiamo limitatamente all’ambiente Windows).

Installiamo MingGW

MinGW (Minimalist GNU for Windows) è il porting in ambiente Windows del famoso compilatore GCC per Linux di cui esiste anche la versione a 64 bit denominata MinGW-w64. Oltre il linguaggio C e C++ il compilatore supporta i seguenti linguaggi di programmazione:

  • Ada
  • Java
  • Fortran
  • Objective-C

MinGW in realtà è una collezione di compilatori tra i quali troviamo oltre che gcc per il codice C, anche g++ per il codice C++ e gfortran per Fortran. Per poter installare MinGW dobbiamo scaricare il file di installazione da questo indirizzo:

https://sourceforge.net/projects/mingw/files/latest/download

otterremo un file di nome mingw-get-setup.exe il quale ci permetterà di scaricare ed installare l’ultima versione del software.

Facciamo doppio click sull’eseguibile e otterremo la seguente schermata:

Schermata di installazione di MinGW

Tramite questa prima interfaccia, possiamo scegliere la versione da installare (la 8.1.0 che al momento è l’ultima) e il tipo di architettura (i686 per la versione a 32 bit e x86_64 per quella a 64 bit). Scegliamo la versione a 64 bit (verrà installato il programma MinGW-w64)) e lasciamo tutto il resto invariato.

Scegliamo il path dove installare MinGW

Al termine dell’installazione dovremo inserire il path degli eseguibili gcc e g++ (i comandi del compilatore GCC) all’interno della variabile d’ambiente Path di Windows:

Aggiungiamo il path dei binari di MinGW alla variaible d’ambiente Path

Una volta modificata la variabile d’ambiente possiamo aprire una console di windows (CMD) e lanciare il seguente comando:

gcc -v

Otterremo un output del tipo:

gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

Installiamo Visual Studio Code

Ora non ci resta che scaricare Microsoft Visual studio Code da questo indirizzo:

https://code.visualstudio.com/Download

Tra le varie opzioni di download, possiamo scegliere tra la versione a 32 e 64 bit, ed inoltre, possiamo scegliere tra una versione User Installer e System Installer: la differenza tra le due è che la versione User può essere installata anche senza avere i diritti di amministratore della macchina e verrà collocata nella cartella dell’utente che la sta installando.

Una volta scaricato ed installato Visual  Studio Code, va aggiunta l’estensione C/C++ extension for VS Code. Questa può essere trovata cercando C++ extension nella vista Extension, come in figura:

La vista Extension si trova nella barra laterale a sinistra, cercando in Search Extension in Marketplace con la chiave C++ extension troveremo il plugin

Adesso possiamo creare il nostro progetto C++, apriamo un prompt dei comandi e ci posizioniamo in una cartella di nostra preferenza (ad esempio Documenti), digitiamo i seguenti comandi MSDOS:

mkdir VSCProjects
cd VSCProjects
mkdir firstProject
cd firstProject
code .

Con l’ultima istruzione code. viene lanciato Visual Studio Code impostando la directory firstProject come workspace. Una volta in Visual Studio Code possiamo utilizzare il terminale integrato cliccando dal menù principale in alto su Terminal > New Terminal.

Fondamentali per le successive fasi di compilazione e di debugging del progetto sono i seguenti file JSON che si trovano nella cartella .vscode (vedremo successivamente come generarli in automatico):

  • tasks.json (istruzione per il build)
  • launch.json (impostazioni del debugger)
  • c_cpp_properties.json (impostazioni del compiler path e di IntelliSense)

Creiamo il primo file cpp e compiliamo il nostro progetto

Installato Visual Studio Code vediamo ora come creare un progetto C++ che compileremo usando MinGW. Creiamo un file c++ nel nostro workspace cliccando sul bottone New File:

Chiamiamo il nuovo file helloworld.cpp e scriviamo il seguente codice:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {

vector<string> msg {"Hello", "C++", "World", "from", "AppuntiSoftware.it!"};

 for (const string& word : msg) {
        cout << word << " ";
 }
 cout << endl;
}

A questo punto dobbiamo creare il file task.json che si occupa di fare il build del nostro semplicissimo progetto. Dal barra del menù in alto, schegliamo Terminal > Configure Default Build Task, si aprirà la seguente schermata:

Scegliamo g++.exe build active file

Cliccando su C/C++: g++.exe build active file verrà generato il seguente file:

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "g++.exe build active file",
      "command": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\g++.exe",
      "args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"],
      "options": {
        "cwd": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

Possiamo modificare il file task.json (e quello launch.json) utilizzando le variabili che sono elencate a questo indirizzo:

https://code.visualstudio.com/docs/editor/variables-reference

Ad esempio, possiamo modificare il file task.json nel seguente modo:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "C/C++: g++.exe build active file",
			"command": "g++.exe",
			"args": [
				"-g",
				"${fileDirname}\\**.cpp",
				"-o",
			"${fileDirname}\\${workspaceFolderBasename}.exe"
			],
			"options": {
				"cwd": "D:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			}
		}
	]
}

Abbiamo modificato quali file compilare utilizzando ${fileDirname}\**.cpp, in modo da poter compilare tutti i file con estensione cpp nella directory corrente, e come nome del file .exe usiamo quello del workspace (${fileDirname}\\${workspaceFolderBasename}.exe). Per l’opzione command possiamo indicare il solo g++.exe senza il path perchè l’abbiamo inserito nella variabile d’ambiente Path.

Per compilare il nostro piccolo progetto basta andare nel menù in alto e cliccare Terminal > Run Build Task… (oppure con la sequenza di tasti Ctrl+Shift+B). Otteniamo un file firstProject.exe che possiamo lanciare col doppio click o da riga di comando ottenendo:

Hello C++ World from AppuntiSoftware.it!

Debugging

Se volessimo provare a debuggare l’applicazione appena creata, dobbiamo per prima cosa creare il file launch.json. Dal main menu in alto clicchiamo su  Run > Add Configuration… e poi scegliamo C++ (GDB/LLDB), vedremo elencate una serie di configurazioni di debugger, scegliamo g++.exe build and debug active file.come mostrato in figura:

Creiamo il file launch.json per abilitare il debugger

Viene successivamente creato il file launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "g++.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "g++.exe build active file"
    }
  ]
}

Se cambiamo la proprietà stopAtEntry a true il debugger si stoppa automaticamente sul metodo main appena lanciamo il debugging. Per lanciare il debugging basterà cliccare sulla barra del menù in alto Run > Start Debugging (oppure semplicemente premendo il tasto F5).

Configuriamo l’editor C/C++

Se volessimo un maggior controllo sul nostro progetto C/C++, possiamo creare un file c_cpp_properties.json che ci permette di cambiare alcune impostazioni quali il path del compilatore, gli include paths, lo standard C++ (default is C++17) ed altro.

Per creare il file, abilitiamo la command palette tramite la sequenza di tasti Ctrl+Shift+P e poi scegliamo C/C++: Edit Configurations (UI). Verrà generato il seguente file c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

COMMENTS

WORDPRESS: 0