Я пишу небольшой 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), как я могу исправить эту проблему?