2017-09-25 3 views
-1

J'essaie d'utiliser un Makefile pour compiler quelques fichiers .c et quelques fichiers .h personnalisés pour créer un seul fichier exécutable. cependant lors de la compilation je reçois l'erreur que l'erreur "Aucun tel fichier ou répertoire".Erreur "aucun fichier ou répertoire" lors de la compilation avec Makefile

Voici mon Makefile, y a-t-il une faille dans la logique quant à la raison pour laquelle les fichiers d'en-tête sont oubliés lors de la compilation?

L'erreur se produit sur la ligne 21 de la compilation au cours de la règle $(BIN)main.o.

C'est l'erreur de temps de compilation:

[email protected]:~/Desktop/Programs/CIS2520/root$ make 
gcc -Wall -g -std=c99 -c -Iinclude -c ./src/main.c 
./src/main.c:4:23: fatal error: structDefns: No such file or directory 
#include "structDefns" 
        ^
compilation terminated. 
makefile:21: recipe for target 'bin/main.o' failed 
make: *** [bin/main.o] Error 1 
[email protected]:~/Desktop/Programs/CIS2520/root$ 

Voici le Makefile:

CC = gcc 
CFLAGS = -Wall -g -std=c99 -Iinclude 

BIN = ./bin/ 
SRC = ./src/ 
INC = ./include/ 

$(BIN)main:  $(BIN)main.o $(BIN)book.o $(BIN)store.o $(BIN)boardGame.o 
     $(CC) -o $(BIN)main $(BIN)main.o $(BIN)book.o $(BIN)store.o 
$(BIN)boardGame.o 

$(BIN)book.o: $(SRC)book.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)book.c 

$(BIN)boardGame.o:  $(SRC)boardGame.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)boardGame.c 

$(BIN)store.o: $(SRC)store.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)store.c 

$(BIN)main.o: $(SRC)main.c $(INC)structDefns.h $(INC)funcDefns.h 
       $(CC) $(CFLAGS) -c $(SRC)main.c 

En ce qui concerne le répertoire des fichiers, le fichier makefile est en dehors de 3 dossiers, bin, src et comprendre. bin est l'endroit où je veux que l'objet et l'exécutable se rendent, src est l'emplacement des fichiers .c et les fichiers .h se trouvent dans le dossier include.

+0

Nous ne pouvons pas vraiment dire sans voir tous vos fichiers et la structure du répertoire. Pour tout ce que nous savons, il peut s'agir d'une faute de frappe. – Evert

+0

Il est également utile si vous affichez la commande de compilation complète + erreur. – Evert

+0

Vous indiquez deux fichiers d'en-tête en tant que dépendances, mais je ne vois aucun indicateur dans la commande actuelle pour fournir un chemin d'accès afin que ces fichiers puissent être trouvés. C'est-à-dire que CFLAGS n'inclut pas -I $ (INC) ou similaire. – Evert

Répondre

1

De la commande de compilation, l'erreur et la ligne de source donnée par l'erreur:

gcc -Wall -g -std=c99 -c ./src/main.c 
./src/main.c:4:23: fatal error: structDefns: No such file or directory 
#include "structDefns" 

il montre que gcc ne peut pas trouver le fichier à inclure. Il l'attend dans le même répertoire que le principal, mais votre Makefile montre qu'il vit dans ./include (ou même ../include par rapport à principal).

Utilisez le drapeau -I pour gcc avec le chemin approprié. Vous pouvez définir ceci à côté de l'autre CFLAGS:

CFLAGS = -Wall -g -std=c99 -Iinclude 

devrait le faire. (je peux être légèrement confondu avec le chemin.Si il échoue encore, essayez les variations de -I./include ou le chemin relatif à la principale: -I../include. Mais il devrait être le chemin du répertoire où vous émettez la commande, non par rapport à main.c.)

+0

J'apprécie le temps et les efforts pour les réponses. Malheureusement, aucune des variantes que j'ai essayées (environ 4 ou 5) ne semble fonctionner. – user8667363

+0

@ user8667363 Essayez 'gcc -Wall -g -std = c99 -c ./src/main.c -Iinclude' en lui-même d'abord. Si cela échoue avec une erreur différente, veuillez montrer cette erreur. – Evert

+0

C'est exactement la même erreur (je crois) la seule chose différente est probablement l'ordre du ./src/main.c et le -Iinclude, je ne sais pas si cela compte. Cependant, j'ai mis à jour l'erreur originale afin que vous puissiez le voir. Remercier!! – user8667363