以下のMakefileを実行した場合、
foo bar fooey barney
という結果を予測していましたが、実際は以下の通り、異なる結果でした。
foo fooey barney
bar fooey barney
と展開される理由をご教授いただけると幸いです。
$ @の変数が一つずつ展開されているように見えますが、その認識で合っていますでしょうか?
■Makefile
FOO= foo
BAR = bar
FOOBAR = $(FOO)$(BAR)
all: $(FOOBAR)
$(FOOBAR):
@echo $ @ $(FOOBAR)
FOO = fooey
BAR = barney
■実行結果
$ make
foo fooey barney
bar fooey barney
No.1ベストアンサー
- 回答日時:
$(FOOBAR):
@echo $@ $(FOOBAR)
は FOOBAR = $(FOO) $(BAR)
であるから
$(FOO) $(BAR):
@echo $@ $(FOO) $(BAR)
であり、ターゲットの方はこの時点での FOO,BAR が展開され
foo:
@echo $@ $(FOO) $(BAR)
bar:
@echo $@ $(FOO) $(BAR)
の意味になります。
No.2
- 回答日時:
詳細については使っている make によって違うかもしれんけど, この例でいえば
$(FOOBAR):
@echo $@ $(FOOBAR)
のところで上の $(FOOBAR) が展開されて
foo bar:
@echo $@ $(FOOBAR)
になる. そして, このように複数のターゲットが指定されているときには
foo:
@echo $@ $(FOOBAR)
bar:
@echo $@ $(FOOBAR)
と個別に記述したのと同じ意味を持つ. 今 all の依存関係で foo と bar の両方を作り直すのであれば, それぞれに対して
(foo に対して) @echo foo fooey barney
と
(bar に対して) @echo bar fooey barney
が実行される.
つまり「$@ が一つずつ展開されている」というよりも「個々のターゲットに対してそれぞれ実行される (結果としてそれぞれのターゲットに展開されている)」というべきかな.
make が正確にどのように認識しているかについては, make に「しかるべき」オプション (ふつうは -p かな) を与えてみればわかると思う.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- 知人・隣人 自分の母がBARとかやりながらアムウェイもやってて、両方ともまぁまぁ多めに稼ぎがあるヒトなんですけど 1 2022/06/14 07:42
- パチンコ・スロット ジャグラーでいくらまで追加投資しますか 3 2023/04/24 10:53
- その他(悩み相談・人生相談) 20の男です。最近お酒飲み始めるようになったのですが、自分らの友達や周りの知人の話を聞いてとても疑問 3 2022/11/03 17:47
- Windows 10 windows11 Xbox Game Bar 3 2022/09/08 00:26
- 恋愛・人間関係トーク ホスト、BAR 会っているのに未読無視する理由はなんですか…? かなり、辛いです。 1 2023/04/22 06:15
- 居酒屋・バル・バー 20の男なのですが、自分は酒を飲みに行く際に、暗くて前が見えないくらいで誰1人喋っておらず、お洒落な 1 2022/10/24 00:34
- カップル・彼氏・彼女 急募です。私は20で2つ上の男性と3回目のデートをします。まだ付き合っていないのですがどのへ行くのが 2 2022/05/10 21:01
- 居酒屋・バル・バー BAR(バー)は18歳の大学生は行けますか? 居酒屋は18でも行けるのですけど、気になってて 5 2023/07/04 18:27
- 邦画 グッバイクルエルワールドのBGM 1 2023/04/06 19:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
最小化ボタンで最小化したフォ...
-
ACCESSで別DBにあるクエリを...
-
円の中に等間隔に線を引くには
-
GetAsyncKeyState() を利用する...
-
excelのvbaを使って日付を置換...
-
エクセル マクロ 別シートから...
-
MATLABの乱数生成関数 rand( ) ...
-
メニューバーのイベントが2回...
-
excel2010でボタンが反応しなく...
-
Sub Auto_Open() 実行されない
-
エクセルで条件をつけて図形を...
-
Switchのわんことあそぼ、めざ...
-
エクセルでの6ヶ月平均の出し方
-
ワードで、グレーの部分しか入...
-
認証コードの入力の仕方教えて...
-
フルスクリーンモードで開いたP...
-
家電量販店で購入した新品ゲー...
-
メフィスト賞の応募歴は無しだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
Sub Auto_Open() 実行されない
-
最小化ボタンで最小化したフォ...
-
ACCESSで別DBにあるクエリを...
-
Excelで、チェックボックスにチ...
-
円の中に等間隔に線を引くには
-
VBAでのユーザフォームの表示有...
-
エクセル マクロ 別シートから...
-
Excel vba 条件分岐 空白セルが...
-
ascW関数の結果がおかしい
-
Excelのマクロ実行後に動作が重...
-
メニューバーのイベントが2回...
-
ExcelVBAで毎月月初の最初にBoo...
-
Excel VBAのステップイン
-
ExcelVBA 日付変更
-
excel2010でボタンが反応しなく...
-
エクセルVBAのコードで質問です...
-
ExcelVBA ドロップボックスで月...
-
excelのvbaを使って日付を置換...
おすすめ情報