びぼうろく

北海道の人。適当にもっさりまったり書きます。さくら荘のましろが好きです。アニメとかパソコンとか

makefileを書いてハマった話

Makefileを書いてみた

とりあえず動くかの確認のために簡単なものを書いた。

hello: hello.cc
  gcc -o hello hello.cc

コンパイルするコードはこれ

#include <stdio.h>

int main(void) {
  printf("Hello, world!\n");
  return 0;
}


これを実行するとどうなるか

GNUmakefile:2: *** missing separator. 中止.

こうなる。


なんでこれでダメなのかわからず3時間悩んだ。。。

解決方法と原因

まず解決方法から
hello: hello.cc
  gcc -o hello hello.cc

これで解決。

原因は何?

答えはタブ。

gcc -o hello hello.cc

ここの部分。
gccの前に入れるのはハードタブじゃなきゃダメらしい。
私はvimrcで

set noexpandtab

としているため、タブがスペースになってしまい、それがmakefileにはダメだったらしい。

vimrcを変更

同じことにならないよう、.vimrcを修正しとくことにした。
.vimrcにこれを追加した。

let _curfile=expand("%:r")
"GNUmakefileの時のみtabスペース
if _curfile == 'GNUmakefile'
  set noexpandtab
endif

これでGNUmakefileを編集するときは自動でハードタブを入力するように、
set expandtab を解除してくれるようになった。