[1]
OBJ = a.o b.o
CC = gcc
main.exe : main.o (OBJ)
$(CC) -o $@ main.o $(OBJ)
[2]
main.exe : main.o $(OBJ)
$(CC) -o $@ main.o $(OBJ)
OBJ = a.o b.o
CC = gcc
このとき、[1] では問題ないが [2] はバグとなる。
どうやら、変数の評価は、ファイルが存在するかどうかを確認する、つまり
main.exe : main.o $(OBJ)
の段階では上n行に書かれている $(OBJ) のみを参照するのに対して、
$(CC) -o $@ main.o $(OBJ)
の段階では、Makefile の最後まで読んで最後に指定されたものを利用する。
つまり、[2] では、以下のように展開されるようである。
main.exe : main.o
gcc -o main.exe main.o a.o b.o
ちょっとした違いだが、片方はバグになるので気をつけなければならない。
今日のランチ:シッダルータ ベジタブルカレー
明日の予測作業時間:4h
0 件のコメント:
コメントを投稿