$ 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.
$**
由于
答案 0 :(得分:0)
很抱歉,但这不是特定于目标的变量的工作方式。特定于目标的变量的范围限定为其目标,并且由于构建该目标而构建的任何先决条件。并非特定于目标的设置会更改由make扩展的其余配方的全局变量的值。
在您的示例中,$proc | Stop-Process
不是all
的先决条件,它是兄弟姐妹。因此,为update_cc
设置的特定于目标的变量对update_cc
目标没有影响。
其次,使用all
肯定是不对的:首先会扩展内部,然后因为${$(CADVISE) $(CADVISE_OPTS) $(CC)}
将整个内容包含在内,它将被视为变量 name ,将查找该变量(显然不存在),从而产生一个空字符串。
我不知道你为什么要添加额外的目标${...}
;为什么不在update_cc
目标上设置特定于目标的变量?
CAdvisor