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

时间:2015-08-14 09:24:15

标签: unix makefile hp-ux

$ make ---会有正常构建

$ make CAdvisor 以上将执行以下步骤:

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

2)使用更新的CC选项

运行all
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.
$**

由于

1 个答案:

答案 0 :(得分:0)

很抱歉,但这不是特定于目标的变量的工作方式。特定于目标的变量的范围限定为其目标,并且由于构建该目标而构建的任何先决条件。并非特定于目标的设置会更改由make扩展的其余配方的全局变量的值。

在您的示例中,$proc | Stop-Process不是all的先决条件,它是兄弟姐妹。因此,为update_cc设置的特定于目标的变量对update_cc目标没有影响。

其次,使用all肯定是不对的:首先会扩展内部,然后因为${$(CADVISE) $(CADVISE_OPTS) $(CC)}将整个内容包含在内,它将被视为变量 name ,将查找该变量(显然不存在),从而产生一个空字符串。

我不知道你为什么要添加额外的目标${...};为什么不在update_cc目标上设置特定于目标的变量?

CAdvisor