web-dev-qa-db-ja.com

Makefile:1:***セパレータがありません。やめる

私はcでプロジェクトを作成していますが、Makefileを作成して実行しようとすると、このエラーが発生します:

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

私のメイクファイルのコードは次のとおりです。

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

また、それはすべて正しくタブ付けされていると思います。

20
João Miranda

タブの問題です。一部のテキストエディターはタブを空白に置き換える場合があります。混乱しない適切なテキストエディターを使用してください。 viまたはその他の基本的なエディターでメイクファイルを開き、そのメイクファイルを書き換えます。

各ターゲットルールの後に、行の先頭に1つのタブを配置する必要があることに注意してください。そのタブの後に来るものはすべてシェルに渡されます(さらに多くのタブ、スペース、その他何でも構いませんが、行の最初にタブがなければならないことに注意してください)。

27

走ってみてください-

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

(もちろんバックアップを保存した後)

11
Leeor

makeは、ルールとターゲットのインデント方法に非常に敏感です。投稿するエラーは通常、ターゲットのルールを単一のタブではなくスペースでインデントすることで発生します。

例えば:

target:
    do stuff

エラーになりますが、

target:
<tab>do stuff

しない。

1

おそらく、Unicode標準を理解している最新のテキストエディターを使用しているでしょう。 -これらのエディターでANSIファイルを開いても、通常はUTF-8として保存されます-これは非常に下位互換性がありますが、ファイルの先頭に「見えない」バイトが2つあるため、他のプログラムは、テキストがどの形式でエンコードされているかを知っています。 -これが、1行目で「エラー」が報告される理由です。

Windows用のメモ帳を使用している場合は、この動作をオーバーライドして「ANSI」形式でファイルを保存するオプションがあるため、幸運です。方法は次のとおりです。

  1. ファイル->名前を付けて保存
  2. 「タイプとして保存」を「すべてのファイル」に変更します。
  3. Makefileの正確な場所を見つけます(時々、別のディレクトリに保存して保存します。なぜこれが起こったのかわかりませんが、それは私に起こり続けています)。
  4. ファイル名を「Makefile」から「Makefile」に変更します。 -末尾のピリオドは重要です(これがないと、「すべてのファイル」が選択されている場合でも、「Makefile.txt」として保存されます)。
  5. 「エンコーディング」を「UTF-8」から「ANSI」に変更します。

    Save with ANSI Encoding

0
BrainSlugs83

実際、私はすべてが正しいと同じような問題に直面しましたが、後でg-editを使用して解決策を伝えることを理解しました

0
avinash k

自動生成されたgcc makefileでソースコードをコンパイルするときに、同じ問題に遭遇します。

最終的に、メイクファイルの先頭にあるutf-8 BOM文字が原因であることがわかりました。これらの文字は、一部のテキストエディターでは表示されません。

そのため、ファイルをBOMなしでutf-8として保存してください。

0
jeffersonpig