私は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
また、それはすべて正しくタブ付けされていると思います。
タブの問題です。一部のテキストエディターはタブを空白に置き換える場合があります。混乱しない適切なテキストエディターを使用してください。 viまたはその他の基本的なエディターでメイクファイルを開き、そのメイクファイルを書き換えます。
各ターゲットルールの後に、行の先頭に1つのタブを配置する必要があることに注意してください。そのタブの後に来るものはすべてシェルに渡されます(さらに多くのタブ、スペース、その他何でも構いませんが、行の最初にタブがなければならないことに注意してください)。
走ってみてください-
Perl -pi -e 's/^ */\t/' Makefile
(もちろんバックアップを保存した後)
makeは、ルールとターゲットのインデント方法に非常に敏感です。投稿するエラーは通常、ターゲットのルールを単一のタブではなくスペースでインデントすることで発生します。
例えば:
target:
do stuff
エラーになりますが、
target:
<tab>do stuff
しない。
おそらく、Unicode標準を理解している最新のテキストエディターを使用しているでしょう。 -これらのエディターでANSIファイルを開いても、通常はUTF-8として保存されます-これは非常に下位互換性がありますが、ファイルの先頭に「見えない」バイトが2つあるため、他のプログラムは、テキストがどの形式でエンコードされているかを知っています。 -これが、1行目で「エラー」が報告される理由です。
Windows用のメモ帳を使用している場合は、この動作をオーバーライドして「ANSI」形式でファイルを保存するオプションがあるため、幸運です。方法は次のとおりです。
実際、私はすべてが正しいと同じような問題に直面しましたが、後でg-editを使用して解決策を伝えることを理解しました
自動生成されたgcc makefileでソースコードをコンパイルするときに、同じ問題に遭遇します。
最終的に、メイクファイルの先頭にあるutf-8 BOM文字が原因であることがわかりました。これらの文字は、一部のテキストエディターでは表示されません。
そのため、ファイルをBOMなしでutf-8として保存してください。