179 :
名無しさん@お腹いっぱい。:
質問です。
Makefileに、
HOGE = -opta
と書かれていて、これは修正しないものとします。
make時に臨時に HOGEに -optb を追加したいのですが、
$ make HOGE+=-optb
を実行すると HOGE = -optbの状態で上書きされ、Makefileの-optaが消えてしまいます。
( += の指定は環境変数HOGEに追加するという意味にしかなりません。)
これを、Makefileの記述も生かしつつ、それに追加ということを
makeのコマンドラインで指定することはできませんか?
もちろん、Makefileの下の行に HOGE+=-optb と追記すればOKですが、
最初に書いたようにMakefileを修正しないということが条件です。
以上、わかる方回答をお願いします。
180 :
名無しさん@お腹いっぱい。:2013/10/05(土) 09:20:10.39
>>179 一時的でよいのであればそのように指定すればよいのではないでしょうか?
$ make HOGE="-opta -optb"
181 :
名無しさん@お腹いっぱい。:2013/10/05(土) 09:29:26.75
>>180 それじゃ解決になりません。
>>179 は例として書いただけで、
実際には HOGE = -opta の部分はもっと複雑で
例えば HOGE = $(FUGA) -Oopt $(BOKE)
みたいに他の変数も参照したりしていて、何に展開されるか自明じゃないです。
そういうのに関係なく、最後に -optb の追加だけやりたいというのを
コマンドラインの make HOGE=... のような書き方で簡単にやりたいという質問です。
では、わかる方(他の方)回答をお願いします。
↓
>>181 他の方でなくて申し訳ないのですが、、、
もしHOGEが一度定義された後、変わらないのであればMakefileを一時的に以下のように変更して、
中身を取り出してはどうでしょうか。
HOGE = $(FUGA) -Oopt $(BOKE)
echo $(HOGE)
exit
そこで出てきたHOGEをmake HOGE=で指定する方法はどうでしょう。
ちなみに
>>179でOKだとされたことが
echo "HOGE+=-optb" >> Makefile; make
であれば、最後にHOGEの内容を変えたあと、HOGEは参照されることはないと思われます。
>>182 すみませんが、全然解決になってません。
Makefileの変更は不可です。
あと、
>>182の下3行は182さんの間違いです。
Makefileでは、変数の展開だけ先にやって、
その後でルールを実行するので、
Makefileの最終行に変数代入追加を行なっても
それより上の行に書いてあるコマンドでちゃんと参照されます。
すみませんが、そのようなことは理解ずみの方のみ回答をお願いします。
ではどうぞ
↓
>>183 勉強になります。
そうであれば、
$ make -p | grep HOGE
で出てきた、値に何か追加して
$ make HOGE="..."
でどうでしょう。
いや、だからそんなのじゃダメだって。
っていうか、make の仕様をくつがえすようなことはできないよ。
ソース書きなよ。
>>179 (cat Makefile; echo HOGE+=-optb) | make -f -
>>188 それでも、Makefileの中から $(MAKE) で自分を再帰呼出ししていたら
-f の指定が無意味になるのでNGだよ。残念。
make を使うのが間違ってるんじゃ
pmake専用
make HOGE="`make -V HOGE` -optb"
CMake 凄すぎワロタwwwwwww
バカなドザの俺でも MinGW で sox を make 出来たwwwwwwww
このアイちゃんツールスゲェwwwwwwww
make loveと入力しても
loveをmakeするルールがないと言われました
照れているのですか?
GNU Make 4.0
Guile が組込まれただと?!
これで一層移植性が悪くなるのか。なんか逆の方向に必死で走ってる。
196 :
名無しさん@お腹いっぱい。:2013/11/23(土) 02:30:05.46
ぼく用メモ
必須項目をfindで列挙するとき-print0オプションをつけると仇となることがある
Makefile で、
%.o : %.cpp
(rule)
と汎用的に書いておき、特定のソースコードはコンパイルオプションを変えてコンパイルしたい
場合、どう書けば良いですか? 上記に続けて
a.o : a.cpp
(rule)
と書いても無視されてしまう…
makefileを分割しないとダメなんですかね?
順序を逆にすれば?
199 :
名無しさん@お腹いっぱい。:2014/10/19(日) 13:11:51.98
export PATH=/usr/new/bin:/usr/localbin:$PATH
としているのですが、
makeすると /usr/local/binにある方が使われてしまいます。
makeで使われるシェルにPATHを設定するためには、どこにその記述をすればよいのでしょうか。
自分でMakefileを作ったわけではなく
具体的には、gccのmake中のものなんですが。
Makefileの中で再設定されてるんだろ。
gccだったらconfigureとか黒魔術がかかってるから、素人は手出しできない。
PATH=/usr/new/bin:/usr/local/bin:$PATH ./configure hoge
で、うまくいくかも。
201 :
名無しさん@お腹いっぱい。:2014/10/19(日) 14:09:36.84
Makefileの中でPATHかコマンドを変えてるんじゃない?
Configuerで変更できないの?
実際の問題はconfigureが/usr/new/binからコマンドを拾ってくれないという方だったりしませんか?
/usr/new/binにある方を使わせたいコマンドとは何でしょう?