2012-09-26 2 views
0

J'ai un makefile qui ne fonctionne tout simplement pas. Pouvez-vous m'aider à trouver l'erreur? Merci!Mon Makefile ne fonctionne tout simplement pas.

CC = gcc 
FILES = workfile.c insert.c 
TARGETS = exe 
CFLAGS = -o 
DBUG = 
RM = rm -f 
OBJS = *.o 

#Master Rule 

all: $(TARGETS) 

#Build 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe 

#workfile 

workfile.o: workfile.c 
    $(CC) $(DBUG) -c *.c 

insert.o: insert.c 
    $(CC) $(DBUG) -c *.c 

clean: 
    $(RM) $(TARGETS) $(OBJS) 

L'erreur est la suivante

$make all 
gcc -c *.c 
gcc -o workfile.o insert.o exe 
gcc: error: exe: No such file or directory 
make: *** [exe] Error 1 

J'ai même essayé de changer les noms des cibles. Mais n'a pas aidé. Impossible de continuer plus loin.

+0

Vous avez spécifié 'exe' comme l'une des entrées ici' $ (CC) $ (CFLAGS) $ (DBUG) workfile.o insert.o exe'. Est-ce que c'est prévu? Peut-être que vous vouliez dire «-o exe» – luk32

+0

@ luk32 oui c'était prévu. :) – Shash

+0

Si vous vouliez cela, alors 'exe' doit exister avant que la règle puisse s'exécuter. Vous avez simplement égaré l'option '-o'. –

Répondre

1

Je ne pense pas que ce soit une bonne idée de mettre -o dans CFLAGS, je préfère en retirer -o.

CFLAGS = -o ->CFLAGS =

Maintenant, vous pouvez travailler sur votre exe, le chemin de sortie devrait suivre -o immédiatement.

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe 

=>

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o 

Ainsi, la pleine makefile devrait ressembler à:

CC = gcc 
FILES = workfile.c insert.c 
TARGETS = exe 
CFLAGS = 
DBUG = 
RM = rm -f 
OBJS = *.o 

#Master Rule 

all: $(TARGETS) 

#Build 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o 

#workfile 

workfile.o: workfile.c 
    $(CC) $(DBUG) -o workfile.o -c workfile.c 

insert.o: insert.c 
    $(CC) $(DBUG) -o insert.o -c insert.c 

clean: 
    $(RM) $(TARGETS) $(OBJS) 
1

Votre CFLAGS est utilisée à tort. L'option -o devrait aller avant exe et ladevrait contenir des drapeaux pertinents pour le compilateur (-O3 -Wall -Wextra -Werror par exemple).

Essayez ceci:

CFLAGS = -Wall -Wextra -Werror 

exe: workfile.o insert.o 
    $(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o exe 

PS: Vous pouvez enlever le DBUG et coller le -g dans CFLAGS en cas de besoin. C'est comme ça qu'on l'utilise dans les Makefiles normaux.

+0

merci beaucoup! ça a marché. – Shash

1

Euh je l'ai eu ... vous avez un -o là dedans cflags. Je pense que vous ne devriez pas utiliser -o dans CFLAGS car il attend un paramètre.

La partie importante qui pourrait être changé:

CFLAGS = 
OUTFILE = fancy_exe 
[...] 
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE) 

Cela devrait fonctionner mieux ... ou même sauter le varaible OUTFILE et mis exe à la main.

Questions connexes