Je suis arrivé à la partie du cours de C dans laquelle il faut utiliser la bibliothèque SDL.
Je l'ai installée, et j'ai téléchargé le Makefile fourni.
Mais dès que je rentre make dans le terminal, une erreur s'affiche :
Makefile:12: avertissement : surchargement de la recette pour la cible « hello » Makefile:9: avertissement : ancienne recette ignorée pour la cible « hello » make: Dépendance circulaire hello <- hello abandonnée. cc -O3 -lSDL -lSDL_mixer -o .c /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o : Dans la fonction « _start » : (.text+0x20) : référence indéfinie vers « main » collect2: error: ld returned 1 exit status <commande interne>: recipe for target '.c' failed make: *** [.c] Error 1
Malgré tous mes efforts, je n'arrive pas à la comprendre.
CPP n'est pas la bonne variable, elle sert à désigner le préprocesseur. C'est CC qui désigne le compilateur C.
Ensuite, il y a une embrouille avec les noms des cibles et dépendances qui contiennent des variables.
Enfin, les deux règles sont inutiles, et redondantes avec les règles par défaut (celles qui disent qu'un .o peut se fabriquer à partir d'un .c en appelant le compilateur C, etc). La "surcharge" vient de là, à mon avis.
C'est plus simple de se baser sur les règles, commandes et macros prédéfinies :
CC = gcc
CFLAGS = -std=c11 # soyons modernes
CFLAGS += -Wall -Wextra # et travaillons sérieusement
CFLAGS += -O3 # optimisation
CFLAGS += -MMD # génération automatique des dépendances
LDFLAGS = -lSDL -lSDL_mixer
# Les exécutables à fabriquer
EXECS = hello
all: ${EXECS}
# La composition des exécutables
hello: hello.o
#
# Formalités habituelles
#
-include $(wildcard *.d) # inclusion des dépendances
clean:
$(RM) *.o *.d
mrproper: clean
$(RM) ${EXECS}
Si on veut créer plusieurs exécutables, il suffit de les ajouter ligne 11, et comme la ligne 17, dire à partir de quels fichiers .o ils sont fabriqués. La gestion des dépendances des sources (les .c qui incluent des .h qui s'incluent les uns les autres) ça se fait automatiquement (avec gnu-make, du moins)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le voici !