# Environnement de travail : Langage C Ce guide a pour objectif la mise en place d'un environnement de travail pour pouvoir éditer, compiler et déboguer des programmes écrit en C (et C++). Le guide se découpe en deux parties principales : (1) **installation d'un compilateur C** et (2) **installation et mise en place de VisualStudio Code**. > **Note:** Même si nous vous présentons l'installation sur différents OS pour vous permettre de développer sur votre machine personnel, tous les projets seront vérifiés sur les ordinateurs de l'ENSTA. Attention donc à prévoir de quoi vérifier que votre projet marche sur ces ordinateurs (un binaire compilé sur votre ordinateur personnel ne fonctionnera pas si l'architecture est différente *ex: Macbook M2*). Le choix de VisualStudio a été fait parce que c'est un éditeur de texte puissant qui vous propose plusieurs fonctionnalités intéressantes (*reformating*, *goto definition*, ...) tout en restant étroitement lié à votre terminal. ## I. Installation d'un compilateur C/C++ L'installation du compilateur varie en fonction de l'OS. Pour faire écho à la note ci-dessus, le code de votre projet sera testé sur les ordinateurs de l'ENSTA mais libre à vous de coder sur votre ordinateur personnel. ### 1. Sur Linux Pour Linux, nous allons utiliser `gcc`/`g++` comme compilateur et `gdb` comme débogueur. Vous pouvez vérifier s'il est déjà installé avec : ```bash $ gcc -v ``` Si ce n'est pas le cas, mettez à jour vos packages et installez la suite GNU avec : ```bash $ sudo apt-get update $ sudo apt-get install build-essential gdb ``` Vous pouvez vérifier l'installation avec la première commande. ### 2. Sur MacOS Pour MacOS, nous allons utiliser le compilateur `clang` (vous pouvez aussi installer `gcc` mais le processus est plus long) qui est un compilateur C différent de `gcc` basé sur LLVM. Vous pouvez vérifier si vous l'avez déjà installé avec : ```bash $ clang --version ``` Si ce n'est pas le cas, il faut installer une suite d'outils pour le développement (`git`, `clang`, ...) avec la commande : ```bash $ xcode-select --install ``` Vous pouvez vérifier l'installation avec la première commande. ### 3. Sur Windows Pour Windows, nous allons utiliser **Windows Subsystem for Linux (WSL)** qui permet d'utiliser Linux de manière transparente sur Windows. Pour l'installer, la commande suivante suffit : ```bash $ wsl --install ``` WSL va mettre en place le noyau Linux mais a besoin d'une distribution (*ex: Ubuntu*). Depuis le Microsoft Store, une installation d'Ubuntu est disponible ! Une fois installée, il ne reste plus qu'à faire le lien entre VSCode et WSL (à la section suivante) ! --- #### Solution alternative : Une solution alternative consiste à utiliser le compilateur `mingw` qui permet d'utiliser `gcc` sur Windows de manière "transparente". MSYS2 est une collection d'outils qui permet une installation rapide et à jour sur Windows. Téléchargez l'installeur sur https://www.msys2.org/. Suivez les informations d'installation disponibles sur le site qui consistent à : 1. Lancer l'installeur et suivre le processus d'installation 2. Lancer `MSYS2 MinGW x64` depuis le menu de démarrage 3. Lancer les commandes suivantes depuis le terminal : ```bash $ pacman -S --needed base-devel mingw-w64-x86_64-toolchain $ pacman -S mingw-x64-x86_64-gcc ``` 4. Ajouter le binaire de `Mingw-w64` aux variables d'environnement : a) Ouvrir les préférences Windows b) Chercher 'variables d'environnement' (ou A propos > Paramètres Système Avancés > Onglet 'Avancé') c) Chercher la variable `Path` et cliquer la modifier d) Rajouter le chemin de `Mingw-w64`, celui par défaut étant `C:\msys64\mingw64\bin` e) Valider pour sauvegarder les changements (le terminal doit être redémarré pour prendre en compte les changements) 5. Vérifier l'installation dans une invite de commande avec : ```bash $ gcc -v ``` --- ### 4. Vérification manuelle Vous devez maintenant avoir un compilateur C installé quelque soit votre OS ! Vous pouvez essayer de compiler à la main le fichier présenté dans la section III. Les commandes de base sont : ```bash $ gcc program.c # Out: Binaire (a.out par défaut) $ gcc program.c -o output # Out: Binaire nommé output $ gcc -c program.c # Out: Fichier objet program.o $ gcc program1.o program2.o -o output # Out: Binaire output à partir de deux fichiers $ gcc -g program.c -o output # Out: Binaire avec infos de debug $ ./ouput # Exécution du binaire ``` ## II. Installation de VSCode VSCode est un éditeur de code puissant qui intègre des composants importants (`git`, debug) et peut être étendu avec des plugins. D'autres sont aussi disponibles comme Atom, SublimeText ou Vim. Nous avons choisi VSCode pour sa simplicité d'installation et des fonctionnalités importantes comme le reformatage, l'affichage des références ou l'affichage de la définition d'une fonction. Libre à vous d'utiliser un autre éditeur de code si VSCode ne vous convient pas ou de vous en servir comme simple éditeur de texte ! > **Note :** VSCode est utilisé en industrie et même disponible dans un projet GitHub interactivement en ligne en appuyant sur '`.`' L'installation se fait sur leur site via https://code.visualstudio.com/download. Une fois effectuée et via votre terminal/invite de commandes, nous allons créer un répertoire pour réunir le code de vos projets et un nouveau projet `hello` : ```bash $ mkdir cprojects $ cd cprojects $ mkdir hello $ cd hello $ code . ``` > **Note :** Pour les utilisateurs Windows, pour connecter WSL, installez le plugin `Remote WSL` (depuis l'icône extensions sur le panneau de gauche). Une fois installé, un bouton vert avec deux flèches est disponible en bas à gauche (nécessite un redémarrage de VSCode). En cliquant dessus, sur la fenêtre qui s'ouvre, sélectionner *New WSL Window using Distro* puis `ubuntu`. > > **Note 2 :** Pour accéder aux fichiers, vous pouvez naviguer dans le répertoire Réseau > `wsl$` > Ubuntu ! La dernière ligne `code .` ouvre le répertoire courant dans VSCode et en fait un **workspace**. Cela veut dire que le dossier `.vscode` va être créé, contenant : - `tasks.json` > informations de *build* - `launch.json` > informations de *debug* Nous ne les modifierons pas ici puisque nous utiliserons principalement le terminal intégré mais libre à vous de vous renseigner sur les tâches que vous pouvez automatiser à l'aide de ces deux fichiers. ## III. Exemple Créez le fichier `hello.c` qui contient : ```c #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } ``` Une compilation très basique du fichier (nous verrons des cas plus complexes avec un projet et un `makefile` plus tard) est disponible avec le bouton *Play* en haut à droite. Par défaut ce bouton *build* (compile) et lance l'exécutable. Dans notre cas, une fois le bouton appuyé vous devriez avoir un nouveau fichier `hello` à côté du fichier source. La fonction de *build* par défaut (dans `tasks.json`) correspond à la commande : ```bash $ gcc -g hello.c -o hello ``` > **Note :** ou `clang -g hello.c -o hello` pour les utilisateurs MacOS ! Vous pouvez supprimer le fichier `hello` et lancer la commande ci-dessus. L'exécutable doit réapparaître et vous pouvez le lancer avec : ```bash $ ./hello ``` ## Références Installation Linux : https://code.visualstudio.com/docs/cpp/config-linux Installation MacOS : https://code.visualstudio.com/docs/cpp/config-clang-mac Installation Windows mingw : https://code.visualstudio.com/docs/cpp/config-mingw Installation Windows WSL : https://code.visualstudio.com/docs/remote/wsl ###### tags: `c`