Améliorations
Le fichier makefile produit des fichiers intermédiaires au beau milieu du code source. On va les ranger dans un répertoire particulier.

Le fichier makefile

#paths
SRC=.
BIN=.
OBJ=obj

target: $(BIN)/lsusb

#packages
PKLIBUSB  = `pkg-config --libs --cflags libusb-1.0`
PKLIBUDEV = `pkg-config --libs --cflags libudev`

#link
$(BIN)/lsusb: $(OBJ)/lsusb.o $(OBJ)/names.o $(OBJ)/sysfs.o $(OBJ)/usbmisc.o $(OBJ)/desc-dump.o $(OBJ)/desc-defs.o $(OBJ)/lsusb-t.o
	gcc -o $(BIN)/lsusb $(OBJ)/lsusb.o $(OBJ)/names.o $(OBJ)/sysfs.o $(OBJ)/usbmisc.o \
	$(OBJ)/desc-dump.o $(OBJ)/desc-defs.o $(OBJ)/lsusb-t.o \
	$(PKLIBUDEV) $(PKLIBUSB)

#compil
$(OBJ)/names.o : $(SRC)/names.c $(SRC)/names.h
	gcc -c -o $(OBJ)/names.o -Wall -Wl,--as-needed $(SRC)/names.c $(PKLIBUDEV)

$(OBJ)/sysfs.o : $(SRC)/sysfs.c $(SRC)/sysfs.h
	gcc -c -o $(OBJ)/sysfs.o -Wall $(SRC)/sysfs.c $(PKLIBUSB)

$(OBJ)/desc-defs.o : $(SRC)/desc-defs.c $(SRC)/desc-defs.h
	gcc -c -o $(OBJ)/desc-defs.o -Wall $(SRC)/desc-defs.c $(PKLIBUSB)

$(OBJ)/desc-dump.o : $(SRC)/desc-dump.c $(SRC)/desc-dump.h
	gcc -c -o $(OBJ)/desc-dump.o -Wall $(SRC)/desc-dump.c $(PKLIBUSB)

$(OBJ)/usbmisc.o : $(SRC)/usbmisc.c $(SRC)/usbmisc.h
	gcc -c -o $(OBJ)/usbmisc.o -Wall $(SRC)/usbmisc.c $(PKLIBUSB)

$(OBJ)/lsusb-t.o : $(SRC)/lsusb-t.c
	gcc -c -o $(OBJ)/lsusb-t.o -Wall $(SRC)/lsusb-t.c $(PKLIBUSB)

$(OBJ)/lsusb.o : $(SRC)/lsusb.c $(SRC)/config.h
	gcc -c -o $(OBJ)/lsusb.o -Wall $(SRC)/lsusb.c $(PKLIBUSB)


clean:
	rm $(OBJ)/*.o
	rm $(BIN)/lsusb

Le lancement de la compilation
Se positionner dans le répertoire où se trouve le fichier makefile
make
La compilation devrait se lancer et se dérouler sans erreur.
une ribambelle de fichiers .o devraient s'ajouter dans le répertoire obj, et le lsusb au répertoire.

Editeur de textes
Si l'on clique sur un fichier texte, l'éditeur par défaut est gedit. On peut l'appeler aussi depuis le terminal, et se passer ainsi de vi.

gedit makefile éditera le fichier makefile, mais bloquera la saisie d'autres commandes depuis le terminal.

gedit makefile & éditera le fichier makefile, et l'on peut continuer d'utiliser le terminal, pour par exemple éditer un autre fichier ou lancer la commande make.

Autres commandes
touch config.h
make
comme le config.h entre dans les dépendances du makefile pour créer lsusb.o, le fait de le toucher, de le modifier ou de modifier sa date (de modification) entrainera uniquement la compilation du lsusb.o et l'édition des liens pour le lsusb.
De cette façon, on ne recompile pas tous les fichiers sources et l'on gagne beaucoup de temps.

make clean
cette commande videra le répertoire obj et détruira l'exécutable lsusb.

Conclusion
C'est bien plus propre ainsi et ressemble étrangement à ce qui existe depuis toujours dans le monde de l'Amiga.