発生しているエラー:
***セパレータがありません(8スペースの代わりにTABを意味していましたか?)。やめる。
makefile
タブの代わりにスペースが含まれていることを意味します。make
ユーティリティは、の使用について悪名高く好き嫌いでSpaceはなく、Tab。したがって、ファイル内のルールスタンザの先頭にがmakefile
含まSpaceれている可能性があります。
例
次の3つの.c
ファイルがあるとします。
こんにちはC
char *
hello()
{
return "Hello";
}
world.c
char *
world()
{
return "world";
}
main.c:
#include <stdio.h>
/* Prototypes. */
char *hello();
char *world();
int
main(int argc, char *argv[])
{
printf("%s, %s!\n", hello(), world());
return 0;
}
私が以下を持っているとしましょうMakefile
:
# The executable 'helloworld' depends on all 3 object files
helloworld: main.o hello.o world.o
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
# Build main.o (only requires main.c to exist)
main.o: main.c
cc -c main.c # Line starts with TAB!
# Build hello.o (only requires hello.c to exist)
hello.o: hello.c
cc -c hello.c # Line starts with TAB!
# Build world.o (only requires world.c to exist)
world.o: world.c
cc -c world.c # Line starts with TAB!
# Remove object files, executables (UNIX/Windows), Emacs backup files,
#+ and core files
clean:
rm -rf *.o helloworld *~ *.core core # Line starts with TAB!
今、私たちはターゲットを構築しようとします
ターゲットに対して実行するとhelloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
見覚えがあります?
問題を修正する
これを修正するにはSpaces、実際のTab文字に変更します。以前vim
はファイルを修復していました。開くだけです:
$ vim makefile
そして、このコマンドを次の場所で実行します。
:%s/^[ ]\+/^I/
注: ^I
は特殊文字です。タイピング^が続くIと比べて異なって解釈されますCtrl+ V- Ctrl+ I。
これにより、1以上Spacesで始まるすべての行が実際の行に置き換えられますTab。
helloworld
ターゲットを再実行すると:
$ make helloworld
cc -c main.c # Line starts with TAB!
cc -c hello.c # Line starts with TAB!
cc -c world.c # Line starts with TAB!
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
参考文献