Un petit air de déjà vu
Pour développer sous Fedora, nul besoin d'installer des IDE, ou des Visual Studio à tire larigot, gcc et terminal suffisent largement.
La porte d'entrée est le programme Terminal, la ligne de commande.

Sur Amiga, on avait déjà tout ça dès 1985, le CLI, Command Line Interface.

puis en 1988, le shell, comme unix.

quelques commandes bien utiles:
ls (équivalent Amiga dir) liste les fichiers du répertoire courant.
ll (list) liste plus détaillée des fichiers du répertoire courant.
cd (idem cd), mais . pour le répertoire courant, .. pour le parent (cd / pour le parent), pour changer de répertoire courant.
gedit (ed ou ced) éditeur de textes qui va nous servir pour éditer le code source et aussi le makefile. gedit s'utilise de la même manière depuis l'interface graphique ou depuis la ligne de commande. pour ne pas bloquer le terminal, il suffit de lancer la commande gedit avec un & en fin de ligne (sur Amiga, c'est la commande run ed qui fait la même chose)
make (idem make) lance la compilation dans le but d'obtenir un exécutable.

Ne pas réinventer la roue.
Si on se pose une question, il est indispensable de vérifier si personne d'autre ne se l'est posée avant nous.
Google est ton ami, puisque si tu tapes "lsusb source code"
la première ligne sort un github, avec le code source qui va bien, puisque c'est la commande lsusb

https://github.com/gregkh/usbutils/blob/master/lsusb.c

On remonte un peu dans l'arborescence des fichiers et on récupère les .c et .h dans un répertoire. Ces fichiers vont servir à la compilation.
Ce n'est pas la bonne manière de récupérer ces fichiers, puiqu'il faudrait utiliser git, et lancer des scripts, mais il faut être vigilant sur le code source que l'on récupère, on peut très bien récupérer du code malicieux qui installe une vérole ou autre joyeuseté.

Les paquets à installer
Installation des paquets libusb, pour pouvoir accéder à l'usb et pour pouvoir développer en C.

sudo dnf install libusb
sudo dnf install libusb-devel
Installation du paquet udev, pour pouvoir accéder aux périphériques gérés par linux.
sudo dnf install libudev-devel

Vérification que les paquets sont bien installés
pkg-config --libs --cflags libusb-1.0
-I/usr/include/libusb-1.0 -lusb-1.0 
pkg-config --libs --cflags libudev
-ludev

Le fichier makefile

target: lsusb

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

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

#compilation
names.o : names.c names.h
	gcc -c -Wall names.c $(PKLIBUDEV)

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

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

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

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

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

lsusb.o : lsusb.c config.h
	gcc -c -Wall lsusb.c $(PKLIBUSB)
Bien sûr il va manquer un fichier config.h que l'on va s'empresser d'écrire config.h
#define PACKAGE "usbutils (GP)"
#define VERSION "014"

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 ainsi que le lsusb devraient s'ajouter au répertoire.

Execution !
[gilloo@fedora master]$ ./lsusb -Version lsusb (usbutils (GP)) 014 Ce sont bien nos modifications

[gilloo@fedora master]$ ./lsusb
Bus 002 Device 003: ID 046d:c001 Logitech, Inc. N48/M-BB48/M-UK96A [FirstMouse Plus]
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0bda:0138 Realtek Semiconductor Corp. RTS5138 Card Reader Controller
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Conclusion
Voilà comment ne pas faire comme les autres, sans utiliser de scripts en python ou shell, pour arriver au même résultat.
Comme on peut toujours améliorer, il y a une suite lsusb la suite