以下の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
- 邦画 グッバイクルエルワールドのBGM 1 2023/04/06 19:36
- ヨーロッパ 海外ではクレジットカードを身分証の代わりとして使えるという記事を見たのですが、お酒などの年齢確認の時 8 2023/05/16 03:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
Excel vba 条件分岐 空白セルが...
-
Sub Auto_Open() 実行されない
-
ステップモードの動作確認方法
-
Excel VBA 選択範囲の罫線色の...
-
ACCESSで別DBにあるクエリを...
-
エクセルのVBAにショートカット...
-
ExcelVBAで毎月月初の最初にBoo...
-
最小化ボタンで最小化したフォ...
-
Excelで、チェックボックスにチ...
-
Excelのマクロ実行後に動作が重...
-
Excel VBAのステップイン
-
エクセルで条件をつけて図形を...
-
エクセルで非表示行を抜かして...
-
エクセルでの6ヶ月平均の出し方
-
ワードで、グレーの部分しか入...
-
PHPで最も近い緯度経度をDBデー...
-
フルスクリーンモードで開いたP...
-
メフィスト賞の応募歴は無しだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
Sub Auto_Open() 実行されない
-
VBAでのユーザフォームの表示有...
-
エクセル マクロ 別シートから...
-
ACCESSで別DBにあるクエリを...
-
最小化ボタンで最小化したフォ...
-
Excel vba 条件分岐 空白セルが...
-
ascW関数の結果がおかしい
-
メニューバーのイベントが2回...
-
GetAsyncKeyState() を利用する...
-
ExcelVBAで毎月月初の最初にBoo...
-
Excelで、チェックボックスにチ...
-
excel2010でボタンが反応しなく...
-
Excelのマクロ実行後に動作が重...
-
実行時エラー9 インデックスが...
-
Excel VBAのステップイン
-
ステップモードの動作確認方法
-
excelのvbaを使って日付を置換...
-
質問2回目になっちゃいます ex...
おすすめ情報