type t (* void *)

ソフトウエアのこととか

プログラミング: shellの雑いはなし

.shからmakeコマンドを叩きたくなり、さらにその中で実行するMakefileの変数を上書きする 処理を書きたくなった。そのラップするスクリプトはどう書いたらよいだろうか。

a.c

#include <stdio.h>
int main()
{
#ifdef A
  printf("a");
#endif

#ifdef B
  printf("b");
#endif
}

Makefile

all:
    gcc $(CFLAG) a.c

さて問題、これをCFLAG=-DA -DBにするようにmakeするためのシェルスクリプトはどう書いたらよいだろうか。 ただし、この実行は複数回やるので変数に束縛することにする。

build.sh

var="CFLAG=\"-DA -DB\""

make "$var"

コレを実行すると以下のようになる。

$ bash build.sh
make: 無効なオプション -- 'D'
make: 無効なオプション -- '"'

さあ何が悪いのかな。

追記

今日1時間ほど詰まった問題を書いてみました。
正解はMakefileの$(CFLAG)が"$(CFLAG)"となっていないからです。

まぁshellはつらいですね……