我正在使用Makefile来构建列表TARGETS
中的一个或所有目标(在本例中,RPMS用于一个或多个体系结构)。
如果给出变量TARGET
,则构建该特定RPM。如果未设置变量TARGET
,则将调用TARGETS中每个TARGET的规则,即:
TARGETS = x86_64 i686
ifdef TARGET
all: $(TARGET)
else
all: $(TARGETS)
endif
<magical part:>
$(TARGETS): TARGET = $@: rpm
rpm:
rpmbuild --target=$(TARGET) SPECS/foo.spec
我也尝试过:
TARGETS = x86_64 i686
ifdef TARGET
all: $(TARGET)
else
all: $(TARGETS)
endif
<magical part:>
$(TARGETS): TARGET = $@
$(TARGETS): rpm
rpm:
rpmbuild --target=$(TARGET) SPECS/foo.spec
可以这样做,或者我会更好地为每个目标重新调用make
,例如:
TARGETS = x86_64 i686
ifdef TARGET
all: rpm
else
all: $(TARGETS)
endif
$(TARGETS):
make TARGET=$@
rpm:
rpmbuild --target=$(TARGET) SPECS/foo.spec
理想的调用TARGET=x86_64 make
相当于make x86_64
。
答案 0 :(得分:1)
我不完全确定你为什么要这样做,但这是一种方法:
TARGETS = a b c
ifdef TARGET
all: $(TARGET)
else
all: $(TARGETS)
endif
$(sort $(TARGETS) $(TARGET)):
@echo $@
sort
函数删除重复项。如果您的TARGET
是TARGETS
中的元素之一,那么Make会在目标列表中抱怨重复,除非您将其删除。