制作目标特定变量

时间:2012-03-16 11:29:24

标签: 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 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).

因此$(NAME)中的$(OTHER_OBJECTS)不包含$(FILE_OBJECTS)有点奇怪,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:2)

如果您在引用的GNU make手册的相同部分中看到几行,您会发现以下内容。

  

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

这意味着先决条件中不提供OTHER_OBJECTS的目标特定值。 (我没试过,但也许你可以使用与自动变量相同的解决方法,即二次扩展。)