从另一个调用一个 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.
$**
- 如何修复此错误
- 还有更好的选择吗?
友情链接:link_how to call target from another
谢谢
抱歉,这不是目标特定变量的工作方式。特定于目标的变量的范围仅限于它们的目标和作为构建该目标的结果而构建的任何 先决条件。对于由 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)
$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.
$**
- 如何修复此错误
- 还有更好的选择吗? 友情链接:link_how to call target from another
谢谢
抱歉,这不是目标特定变量的工作方式。特定于目标的变量的范围仅限于它们的目标和作为构建该目标的结果而构建的任何 先决条件。对于由 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)