38

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

また、すべて正しくタブ化されていると思います。

4

7 に答える 7

52

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

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

于 2013-09-21T18:58:17.970 に答える
19

走ってみませんか -

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

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

于 2013-09-21T19:03:10.443 に答える
3

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

例えば:

target:
    do stuff

エラーになりますが、

target:
<tab>do stuff

しない。

于 2013-09-21T18:58:06.373 に答える
0

Unicode 標準を理解する最新のテキスト エディターを使用している可能性があります。-- これらのエディタで ANSI ファイルを開いた場合でも、通常は UTF-8 として保存されます -- これは後方互換性が非常に高いですが、ファイルの先頭に「見えない」2 バイトが配置される点が異なります。他のプログラムは、テキストがどの形式でエンコードされているかを認識します。-- これが、1 行目に「エラー」が報告される理由です。

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

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

    ANSIエンコーディングで保存

于 2016-03-13T06:44:11.207 に答える
0

実際、私は同様の問題に直面し、すべてが正しかったのですが、後で、g-edit を使用して解決策を伝えるのに失敗したことを理解しました。

于 2015-02-07T19:37:01.937 に答える