web-dev-qa-db-fra.com

Comment compiler un programme C avec make sur Mac OS X Terminal

J'ai récemment acheté un Macbook Pro et je veux faire du codage en C avec le terminal.

Je peux compiler le code avec cette commande:

gcc filename.c –o filename

Mais je veux le compiler avec la commande make car je sais que c'est la meilleure pratique et je veux suivre la meilleure pratique.

make filename cc filename.c -o filename

Cette commande me donne la sortie suivante:

make: Nothing to be done for `ex01'.
make: *** No rule to make target `cc'.  Stop.

Notez que j'ai installé les outils de ligne de commande du développeur Xcode et Xcode et dans le dossier / usr/bin je vois les propriétés make et makefile.

Quelqu'un at-il une idée de ce que je dois faire pour pouvoir compiler avec makefile et l'argument cc?

9
Raphael Teubner

Créez un fichier appelé Makefile sur le même chemin avec ce contenu:

CC = cc
CFLAGS = -std=c99 -pedantic -Wall
OBJECTS = filename.o

all: appname

filename.o: filename.c
    $(CC) $(CFLAGS) -c filename.c

appname: $(OBJECTS)
    $(CC) $(OBJECTS) -o appname

clean:
    rm -f *.o appname

Exécutez ensuite:

make

Bien sûr, remplacez appname par le nom de votre programme

Remarque: Il doit y avoir un "tab" (pas d'espaces) avant

$(CC) $(CFLAGS) -c filename.c

et

$(CC) $(OBJECTS) -o appname
14
David Ranieri

Je suivais le même tutoriel , et j'ai rencontré un problème similaire.

Je ne sais pas exactement ce que vous avez fait, mais je pense que l'erreur exécutait la mauvaise commande. Vous avez tapé make filename cc filename.c -o filename, mais le didacticiel nous a demandé d'utiliser make filename, sans le cc filename.c -o filename partie. Peut-être avez-vous lu une ancienne version?

Et, make filename fonctionne très bien, Vous n'avez pas besoin d'un Makefile .


Pour info, voici comment j'ai rencontré le problème et comment je l'ai résolu:

  1. a tapé le code ci-dessous et l'a enregistré dans un fichier nommé "ex1"

     int main(int argc, char *argv[])
     {
         puts("Hello world.");
    
         return 0;
     }
    
  2. tapé make ex1dans le terminal
  3. a obtenu un message d'erreur make: Nothing to be done for 'ex1'.

Comme vous pouvez le voir, mon erreur était que le nom de fichier du code source devrait être ex1.c , PAS ex1 .

Et comme je change le nom du fichier en ex1.c, et exécuté make ex1, ça a marché.

5
kly