Сделать целевые переменные - PullRequest
1 голос
/ 16 марта 2012

Я пишу небольшой make-файл, и у меня проблема с целевыми переменными, у меня есть этот кусок кода:

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)

это кусок, который уместен, когда я призываю

make finput

в целевой отладке я получаю все .o файлы, но

@echo $^

производит только

suma.o roznica.o iloczyn.o macierz.o main.o

так как FILE_OBJECTS не были добавлены, но в GNU make manual:

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).

Так что немного странно, что $ (OTHER_OBJECTS) в $ (NAME) не включает $ (FILE_OBJECTS), как я могу исправить эту проблему?

1 Ответ

2 голосов
/ 16 марта 2012

Если вы посмотрите пару строк в том же разделе руководства по GNU, которое вы цитировали, вы обнаружите следующее.

Как и в случае с автоматическими переменными, эти значения доступны только вконтекст рецепта цели

Это означает, что конкретное значение цели OTHER_OBJECTS недоступно в предварительных условиях.(Я не пробовал, но, возможно, вы можете использовать тот же обходной путь, что и с автоматическими переменными, а именно вторичное расширение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...