2012-03-16 10 views
1

私は小さなメイクファイルを書いています、と私はターゲット固有の変数に問題を持って、私は、コードのこの部分を持っている:私はメイクターゲット固有の変数

を呼び出すとき

FILE_SOURCE := pliki.c wczytaj_plik.c wypisz_plik.c 
CONSOLE_SOURCE := wczytaj_konsola.c wypisz_konsola.c 
OTHER_SOURCE := suma.c roznica.c iloczyn.c macierz.c 
HEADERS := suma.h roznica.h iloczyn.h wypisz.h wczytaj.h macierz.h 
DEFINE_OPT = 
NAME=macierze 
FILE_OBJECTS := $(FILE_SOURCE:.c=.o) 
CONSOLE_OBJECTS := $(CONSOLE_SOURCE:.c=.o) 
OTHER_OBJECTS := $(OTHER_SOURCE:.c=.o) 
finput: HEADERS+=pliki.h 
finput: DEFINE_OPT+=-D WEWY_PLIKI 
finput: OTHER_OBJECTS+=$(FILE_OBJECTS) 

finput cinput: debug $(NAME) 

$(NAME): $(OTHER_OBJECTS) main.o 
    @echo $^ 
    gcc $(CFLAGS) -o $(NAME) $^ 

debug: 
    @echo $(OTHER_OBJECTS) 

これは、関連する作品です私はすべての.oファイルを取得しますが、

@echo $^ 

だけを生成し、ターゲットのデバッグで

make finput 
suma.o roznica.o iloczyn.o macierz.o main.o 

FILE_OBJECTSを追加しましたが、GNUにマニュアルを作成していなかったようなので、されています

There is one more special feature of target-specific variables: when you define a target-specific variable that variable value is also in effect for all prerequisites of this target, and all their prerequisites, etc. (unless those prerequisites override that variable with their own target-specific variable value). 

だから、$(NAME)で$(OTHER_OBJECTS)が$が含まれていないことを少し奇妙です(FILE_OBJECTS)、どうすればこの問題を解決できますか?

答えて

2

あなたが引用したGNU makeマニュアルの同じセクションでいくつか見てみると、次のようになります。自動変数と同様

、これらの値は、これはOTHER_OBJECTSの標的特異値が前提条件では使用できないことを意味し、ターゲットのレシピ

のコンテキスト内でのみ利用可能です。 (試したことはありませんが、おそらく2次拡張という自動変数と同じ回避策を使用することができます)

+0

ありがとう、私のためにそれを覚えていただきありがとうございます。 – Andna

関連する問題