.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はつらいですね……