OpenWRT étant l’avenir du projet OpenBox4, l’idée est d’en apprendre le fonctionnement progressivement dans le but ultime de le maîtriser totalement.
Cela permettra par la même occasion d’apprendre de GNU make dans toutes ses subtilités. Il peut être utile de se référer au manuel, ainsi qu’aux conventions d’écritures de Makefile
s pour les logiciels GNU.
Il est également utile d’installer le paquet make-doc
(c’est comme ça qu’il s’appelle sous Debian, il peut avoir un autre nom sur une autre distribution Linux) pour pouvoir s’y référer ultérieurement :
# aptitude install make-doc
Passons maintenant aux choses sérieuses
On va commencer par le Makefile principal, qui est le point d’entrée du système de compilation d’OpenWRT.
La première ligne est :
TOPDIR:=${CURDIR}
C’est le bon moment pour consulter la documentation :
$ info make
On cherche alors CURDIR
(touche /
, taper CURDIR
, puis Entrée
). Résultat :
For your convenience, when GNU `make’ starts (after it has processed
any `-C’ options) it sets the variable `CURDIR’ to the pathname of the
current working directory. This value is never touched by `make’
again: in particular note that if you include files from other
directories the value of `CURDIR’ does not change. The value has the
same precedence it would have if it were set in the makefile (by
default, an environment variable `CURDIR’ will not override this
value). Note that setting this variable has no impact on the operation
of `make’ (it does not cause `make’ to change its working directory,
for example).
Au lancement de make
, la variable CURDIR
reçoit le chemin du répertoire de travail courant, c’est-à-dire le répertoire contenant le Makefile
courant. Cette variable gardera la même valeur dans tout le Makefile
(à part si on la change explicitement bien sûr), et n’est pas affectée par une variable d’environnement du même nom. Le fait de changer la valeur de CURDIR
n’a aucun impact sur le déroulement du make
, en particulier cela ne changera pas le répertoire de travail courant.
On comprend bien alors l’intérêt de cette première ligne. Dans les sous-Makefile
s qui seront appelés récursivement, la variable CURDIR
va changer pour contenir successivement les différents chemins du répertoire de travail courant.
La variable TOPDIR
, elle, conservera toujours la même valeur, le chemin du répertoire contenant le Makefile
principal, c’est-à-dire le répertoire à la racine de l’arborescence d’OpenWRT.
Nous verrons par la suite que TOPDIR
servira à désigner des sous-répertoires dans l’arborescence d’OpenWRT, sans dépendre du chemin absolu où il est installé.