从另一个调用一个 make 目标时出错

Error in calling one make target from another

$make --- 正常构建

$制作CAdvisor 以上将执行以下步骤:

1) 更新变量CC,现在应该变成"cadvise -pdb mypdb +wlint +wall aCC"

2) 运行 all 更新了 CC 选项

CC = aCC
CFLAGS  = -c #-Wall
LDFLAGS =
SOURCES = foo.cc
OBJECTS = $(SOURCES:.cc=.o)
EXECUTABLE = observer
RM=rm -rf
CADVISE_OPTS= -pdb mypdb +wlint
CADVISE= /opt/cadvise/bin/cadvise

.PHONY : CAdvisor update_cc clean all

all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cc.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    $(RM) $(EXECUTABLE) $(OBJECTS)

update_cc: CC := ${$(CADVISE) $(CADVISE_OPTS) $(CC)}

CAdvisor: update_cc all;
    @echo DEBD $(CC)

现在上面的代码给我错误:

**$ make CAdvisor
Make: Don't know how to make CC.  Stop.
$**

谢谢

抱歉,这不是目标特定变量的工作方式。特定于目标的变量的范围仅限于它们的目标和作为构建该目标的结果而构建的任何 先决条件。对于由 make 扩展的其余配方,特定于目标的设置不会更改 global 变量的值。

在您的示例中,all 不是 update_cc 的先决条件,它是兄弟。因此,为 update_cc 设置的目标特定变量对 all 目标没有影响。

其次,使用${$(CADVISE) $(CADVISE_OPTS) $(CC)}肯定是不对的:里面会先展开然后因为整个东西都被包围在${...}里面所以会被当作一个变量name ,将查找该变量(显然不存在),结果为空字符串。

我完全不知道你为什么要添加额外的目标 update_cc;为什么不直接在 CAdvisor 目标上设置特定于目标的变量?

CAdvisor: CC := $(CADVISE) $(CADVISE_OPTS) $(CC)

CAdvisor: all
        @echo DEBD $(CC)