Makefile 生成特定于目标的变量

Makefile 生成特定于目标的变量,makefile,Makefile,我正在编写一个小的makefile,我对特定于目标的变量有一个问题,我有一段代码: 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 wcz

我正在编写一个小的makefile,我对特定于目标的变量有一个问题,我有一段代码:

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
因此,就像没有添加文件对象,但在gnu make手册中:

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

所以有点奇怪,$(名称)中的$(其他对象)不包括$(文件对象),我如何解决这个问题?

如果您在引用的GNU make手册的同一部分中查找几行,您将发现以下内容

与自动变量一样,这些值仅在目标配方的上下文中可用


这意味着
其他_对象的目标特定值在必备项中不可用。(我没有试过,但也许您可以使用与自动变量相同的解决方法,即二次扩展。)

好的,谢谢您为我解释清楚,我没有注意到这个细节。