Makefile

2014-09-09

Introduction

Un fichier Makefile explique les étapes pour obtenir un certain résultat. Par exemple, comment obtenir un programme exécutable à partir de ces sources. Il est exécuté avec la commande make. Ainsi, plutôt que d’écrire soi-même les différentes commandes pour compiler un programme, il suffit de taper la commande make. De plus, la Makefile permet de ne faire que les opérations nécessaires (par exemple, seulement recompiler les fichiers modifiés).

Lorsqu’on écrit un programme pour une carte Arduino, il est conseillé aux débutants d’utiliser l’IDE officiel (voir la première partie). Cependant, quand on préfère utiliser ses propres programmes, il vaut mieux ne pas avoir à en dépendre. On utilise alors un Makefile qui peut être utilisé depuis n’importe quel IDE suffisamment avancé.

Cette page présente donc un Makefile que j’ai écrit pour cet utilisation.

Télécharger

Récupérez le Makefile depuis GitHub. Il fait partie du projet arduino.c.

Configuration

Une petite configuration du Makefile est d’abord nécessaire. Au début du fichier, vérifiez la valeur des variables suivantes et donnez-en leur une correcte si besoin :

Note : $(BASE_PATH) désigne le répertoire où se trouve le fichier ‘Makefile’.

Options

Pour compiler, créez un lien symbolique vers le Makefile d’arduino.c dans le répertoire de votre projet. Compilez ensuite avec la commande ‘make’. Alternativement, vous pouvez simplement copier le fichier ‘Makefile’ et le répetoire ‘core/’ dans le répertoire du projet. Pour plus d’information, consultez, le fichier ‘README’.

Pour compiler un projet Arduino classique (C++, bibliothèques supplémentaires d’Arduino, …), vous devrez ajouter " MODE=cpp" aux appels à make. Si vous préférez, vous pouvez simplement décommenter la ligne appropriée dans le Makefile.

Utilisation

Le Makefile vous permet d’utiliser les commandes suivantes :

Portage en C

J’ai fini par devenir un inconditionnel du C pour ce qui est de la programmation dure (autre que scriptée). Aussi, le fait d’utiliser du C++ pour programmer pour Arduino ne m’enchantait pas particulièrement. Le Makefile présenté ci-dessus permet de s’affranchir de la dépendance à l’IDE et de programmer purement en C. Seulement, cela amène des limitations importantes, puisque une bonne partie du code utilisé pour les Arduino est en C++.

Notamment, les bibliothèques sont codées en C++ (jetez un œil au code source de EEPROM pour rire un coup) et l’interface sérielle également (ce qui permet à l’ordinateur d’intéragir avec la carte une fois son programme lancé). J’ai donc commencé à porter les fichiers les plus importants en C. Pour le moment, il s’agit surtout de l’interface USB (fichiers USBCore.cpp, HID.cpp et CDC.cpp).

Pour vous servir de ce portage, récupérez les fichiers d’arduino.c (via Git) et indiquez leur emplacement dans le Makefile. Une fois votre projet recompilé et envoyé sur la carte, vous devriez avoir accès à /dev/ttyACM0. En particulier, la fonction de redémarrage automatique est disponible !