.. _01-getting-started: Premiers pas ============ Ce cours d'apprentissage du langage C nécessite un environnement (machine physique, machine virtuelle ou container) équipé avec : #. un système d'exploitation Linux (Ubuntu ou équivalent) ; #. le compilateur `gcc `_ ; #. et l'environnement de développement `VS Code `_. La figure ci dessous illustre les installations à réaliser pour 4 architectures (machines) différentes : - un PC Windows ; - un PC Linux ; - un MacBook ; - un environnement GitHub codespace. .. image:: ../images/01-platforms.drawio.png :width: 30% :align: center | A partir des paragraphes ci dessous, installer les éléments nécessaires en fonction de votre environnement de travail. Si vous choisissez de travailler dans un environnement GitHub, vous pouvez passer directement à `4. Travailler dans un codespace GitHub`_. 1. WSL2, Linux sur une machine Windows -------------------------------------- Sur une machine Windows, il faut installer WSL2, une architecture permettant de faire tourner un vrai noyau Linux. Cette solution est plus légère qu'une machine virtuelle `VirtualBox `_ ou `VMware `_. .. image:: ../images/wsl2.svg :width: 50% :align: center .. admonition:: A faire... Suivre toutes les étapes de `ce tutorial `_ pour installer WSL2/Ubuntu sur une machine Windows : - `Install WSL `_ ; - `Install Ubuntu WSL `_ ; - `Configure Ubuntu `_. Il est efficace de choisir le même username/password que celui de votre compte ESIEE. Lorsque vous rentrez un mot de passe, le terminal n'affiche rien. C'est normal. Il faut taper le mot de passe normalement et valider avec la touche ``Entrée``. A l'issue de l'installation, la distribution Ubuntu apparait comme une application Windows dans le menu démarrer. Il suffira de lancer cette application pour démarrer un terminal Ubuntu. .. image:: ../images/ubuntu.png :width: 25% :align: center | Le terminal est un vrai terminal Linux qui permet d'installer des paquets, de compiler des programmes, etc... | .. image:: ../images/terminal-ubuntu.png :width: 80% :align: center | Le système de fichiers Linux est accessible depuis Windows. | .. image:: ../images/filesystem.png :width: 80% :align: center | Réciproquement, le système de fichier Windows, est accessible depuis le terminal Ubuntu. Par exemple, le répertoire Windows ``C:\Users\user`` est accessible via le répertoire Ubuntu ``/mnt/c/Users/user``. L'étape suivante consiste à installer le compilateur :command:`gcc`. 2. Le compilateur :command:`gcc` -------------------------------- Cette étape nécessite un environnement Linux : - Windows WSL2/Ubuntu ; - ou un environnement Linux natif. .. warning:: Dans l'environnement MacOS, il faut installer `XCode `_. Dans un terminal, lancer la commande :command:`gcc --version`. Si le terminal affiche l'information demandée, le compilateur ``gcc`` est déjà installé. Si le terminal affiche une erreur, il faut installer ``gcc`` avec:: $ sudo apt update $ sudo apt install build-essential A l'issue de cette opération, la commande :command:`gcc --version` doit fonctionner:: $ gcc --version gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 3. VS Code ---------- S'il n'est pas déjà installé, l'étape suivante consiste à installer l'environnement de développement VS Code. La procédure d'installation est décrite ci dessous en fonction du système d'exploitation natif : - `macOS `_ ; - `Linux `_ ; - `Windows `_. On installera a minima l'extension `C/C++ `_ qui fournit une aide très utile (coloration syntaxique, auto complétion, formatage du code, etc...) 4. Travailler dans un codespace GitHub -------------------------------------- Le codespace GitHub est un container associé à un repo, fournissant un environnement VS Code et un terminal Ubuntu dans le cloud. Comme le montre la figure de début de chapitre, il est totalement configuré par défaut et aucune installation additionnelle n'est nécessaire. Pour plus de détails, consulter la page `Vue d’ensemble de GitHub Codespaces `_. La figure ci dessous illustre la différence entre le travail sur une machine locale et le travail avec un codespace. .. figure:: ../images/01-working-with-codespace.png :width: 80% :align: center Source : https://4geeks.com/lesson/what-is-github-codespaces Se connecter sur `GitHub `_. `Créer un nouveau repo `_ en renseignant uniquement le champ ``Repository name``. Vous pouvez le nommer ``igi3008-c``. Il est disponible à l'adresse ``https://github.com/YOUR_GITHUB_NAME/igi3008-c``. Lui associer un codespace avec ``Create a codespace``. .. image:: ../images/01-start-coding-with-codespace.png :width: 50% :align: center Vous vous retrouvez dans un environnement de travail VS Code (navigateur de fichiers, éditeur de texte, terminal Linux, etc...) dont l'adresse est du type ``https://CODESPACENAME.github.dev``. Pour synchroniser votre codespace et votre repo, dans le terminal :: $ git add . $ git commit -m "un message explicatif" $ git push .. tip:: Les codespaces sont gérés par la page `https://github.com/codespaces `_. C'est ici qu'il est possible de les arrêter, de les supprimer, de les cloner, etc... Il est conseillé de les arrêter lorsqu'ils ne sont pas utilisés pour économiser des ressources. 5. Un premier programme ----------------------- Pour vérifier que l'environnement de travail est opérationnel, on va dérouler le processus de création/compilation/exécution d'un programme minimal et vérifier son bon fonctionnement. .. tip:: Dans un environnement Windows WSL2/Ubuntu il co-existe deux systèmes de fichiers. Celui de l'OS natif (Windows) et celui de WSL2/Ubuntu : 1. depuis un terminal WSL2/Ubuntu, le système de fichiers Windows est référencé par ``/mnt/c/Users/YOUR_WINDOWS_USERNAME/`` 2. depuis Windows, le système de fichiers WSL2/Ubuntu est référencé par ``\\wsl.localhost\Ubuntu-20.04\home\YOUR_UBUNTU_USERNAME``. Il est visible dans le navigateur de fichiers. Il est conseillé de créer/modifier les fichiers dans Windows. Il est obligatoire de compiler/exécuter depuis le terminal WSL2/Ubuntu en utilisant le chemin d'accès décrit dans la première option ci dessus. Ecrire le code source ~~~~~~~~~~~~~~~~~~~~~ Quelque soit l'architecture retenue, ouvrir Visual Studio Code. Si vous n'êtes pas dans un codespace, se placer dans le répertoire de travail avec :command:`File > Open Folder...`. Dans un codespace, le répertoire de travail est déjà ouvert. Il faudra régulièrement le synchroniser avec le repo correspondant. Créer un nouveau fichier :file:`hello.c` et y copier/coller le programme ci dessous: .. code-block:: c :linenos: #include int main(){ printf("Hello World !\n"); return 0; } Compiler ~~~~~~~~ Dans le terminal, créer un programme exécutable :file:`hello` avec la commande:: $ gcc -std=c99 -Wall -Wextra hello.c -o hello Les options de compilation ``-std``, ``-Wall``, ``-Wextra`` seront abordées ultérieurement. La compilation doit se dérouler sans erreur et un fichier :file:`hello` doit se trouver dans le répertoire avec le fichier source :file:`hello.c`:: $ ls $ hello hello.c Exécuter ~~~~~~~~ Lancer le fichier exécutable. La chaine de caractères ``Hello World !`` doit s'afficher:: $ ./hello Hello World ! Synchroniser ~~~~~~~~~~~~ Si vous travaillez avec les codespaces GitHub, pour assurer la persistence des données (votre code), il faut régulièrement synchroniser le codespace avec le repo. Dans le terminal:: $ git add . $ git commit -m "un message explicatif" $ git push Vérifier que le repo ``https://github.com/YOUR_GITHUB_NAME/igi3008-c`` reflète fidèlement le contenu du codespace. .. important:: Les étapes ci dessus seront à reproduire chaque fois qu'il y aura du code à écrire : - écrire le code source ; - compiler ; - exécuter ; - synchroniser (GitHub codespace).