web-dev-qa-db-ja.com

「セパレーターがない(TABのことですか)」と文句を言う

som_pak-3.1-NAcMoS.tar.gzファイルをインストールしようとしているときに、以下のコマンドを使用しました。

$ tar xvf som_pak-3.1-NAcMoS.tar.gz
$ cd som_pak-3.1
$ cp makefile.unix makefile
$ make
$ cd ..
$ ln -s som_pak-3.1 $NACMOS_HOME/som_pak

しかし、makeコマンドを実行すると、次のエラーが発生します。

*セパレータがありません(8スペースの代わりにTABを意味しましたか?)。やめる。

  • エラーの理由を誰かに教えてもらえますか?
  • これに含める必要があるパッケージはありますか?
10
Rincy Raphael

他の回答が示唆したように、Makefileにはスペース文字ではなくタブ文字が必要です。私は.vimrcすべてのタブをスペースで自動的に置き換えるように設定するため、個々のMakefileで逆の設定を手動で設定する必要があります。私が使用するvimコマンドは次のとおりです。

:%s/^[ ]\+/\t/g
1
Emily Herbert

注:この特定の問題に対処する正しい方法は、1つのタブ文字を使用して各レシピの各アクション行がインデントされるようにMakefileを修正し、そのパッチを元の開発者に提出することです。

これは醜いハックであり、GNU makeの最近のバージョンで動作します(Makefileが一貫してタブではなくスペースを使用していることが問題である場合):

make '.RECIPEPREFIX+='

これにより、特別なGNU make変数.RECIPEPREFIXが単一のスペースに設定されます。この変数は、GNU make 3.82程度(2007)、レシピのアクション行の接頭辞として使用される文字を制御します。変数が空の場合(デフォルトの場合)、タブが使用されます。

例、

$ cat Makefile
all:
  echo hello
$ make '.RECIPEPREFIX+='
echo hello
hello

例、>での使用を示します(この場合はMakefile内の変数を設定します):

$ cat Makefile
.RECIPEPREFIX = >
all:
> echo hello
$ make
echo hello
hello

以下も参照してください。

0
Kusalananda