web-dev-qa-db-fra.com

Makefile: 1: *** séparateur manquant. Arrêtez

Je crée un projet sur c et quand je crée mon Makefile et que je tente de l'exécuter, cela me donne l'erreur

Makefile:1: *** missing separator.  Stop.

Mon code makefile est:

CC=gcc
OBJ=./objetos
INC=./include
FON=./aqsFonte
BIB=./bibliotecas
OPBIB=-lBiblioteca
ProjetoFinal: libFinal.a 
    $(CP) $(FON)/ProjetoFinal.c -I$(INC) -L$(BIB) $(OPBIB) -o ProjetoFinal

Bibliotecas.a: Caminho.o Libs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o
    ar -q $(BIB)/libFinal.a Caminho.o ibs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o

Caminho.o:
    $(CP) $(FON)/Caminho.c -o Caminho.o
Libs_Defines.o :
    $(CP) $(FON)/Libs_Defines.c -o Libs_Defines.o
Matrizes.o:
    $(CP) $(FON)/Matrizes.c -o Matrizes.o
Proc_Imagens.o: 
    $(CP) $(FON)/Proc_Imagens.c -o Proc_Imagens.o
Vetores.o:
    $(CP) $(FON)/Vetores.c -o Vetores.o

Aussi, tout est correctement tabulé, je suppose.

17
João Miranda

C'est un problème d'onglets. Certains éditeurs de texte peuvent remplacer les tabulations par des espaces, assurez-vous d'utiliser un éditeur de texte approprié qui ne gâche rien. Ouvrez votre makefile dans vi ou tout autre éditeur rudimentaire, et réécrivez ce makefile. 

Notez qu'après chaque règle cible, un seul onglet doit être placé au début de la ligne. Tout ce qui vient après que cet onglet est transféré au shell (il peut y avoir plus d'onglets, d'espaces et tout ce que vous voulez, mais gardez à l'esprit qu'il doit y avoir un onglet au début de la ligne).

22
Filipe Gonçalves

pouvez-vous essayer de courir -

Perl -pi -e 's/^  */\t/' Makefile

(après avoir sauvegardé une sauvegarde bien sûr)

9
Leeor

make est très sensible à la manière dont les règles et les objectifs sont mis en retrait. L'erreur que vous publiez est généralement provoquée par l'indentation de la règle d'une cible avec des espaces au lieu d'un seul onglet.

par exemple:

target:
    do stuff

va erreur, mais

target:
<tab>do stuff

ne sera pas.

1
Andreas Grapentin

Vous utilisez probablement un éditeur de texte moderne qui comprend le standard Unicode. - Même si vous ouvrez un fichier ANSI dans ces éditeurs, ils seront généralement sauvegardés sous le format UTF-8 - ce qui est très compatible avec les versions antérieures, sauf que cela place deux octets "invisibles" au début du fichier. que d'autres programmes sauront quel format le texte est codé. - C’est pourquoi l’erreur est signalée à la ligne 1.

Si vous utilisez le Bloc-notes pour Windows, vous avez de la chance, car il existe une option pour remplacer ce comportement et enregistrer le fichier au format "ANSI". Voici comment:

  1. Fichier -> Enregistrer sous
  2. Changez "Enregistrer en tant que type" en "Tous les fichiers".
  3. Trouvez l'emplacement exact du Makefile (parfois, enregistrer en tant que vous place dans un répertoire différent, je ne sais pas pourquoi cela s'est passé, mais cela n'arrivait pas de m'arriver).
  4. Changez le nom du fichier de "Makefile" en "Makefile". - la période de fin est importante (sans elle, il sera enregistré sous le nom "Makefile.txt", même si "Tous les fichiers" est sélectionné).
  5. Changez le "Codage" de "UTF-8" en "ANSI".

     Save with ANSI Encoding

0
BrainSlugs83

en fait, j’ai fait face à un problème similaire. Tout était correct, mais j’ai compris par la suite. J'ai utilisé g-edit pour indiquer la solution et cela a bien fonctionné

0
avinash k

Je viens de rencontrer le même problème lorsque je complète mon code source avec gf makefile généré automatiquement.

J'ai finalement trouvé que c'était dû aux caractères utf-8 de la nomenclature au début du fichier makefile.

alors essayez de sauvegarder le fichier en tant que utf-8 sans nomenclature.

0
jeffersonpig