我创建了一个父makefile。如下:
SHELL = /bin/bash
HOMEDIR = $(shell pwd)
PKGNAM = PARAMETIS
override VERSION = 4.0.3
YESDIR = $(shell echo $(@:install-%=%) | tr A-Z a-z)
NODIR = $(shell echo $(@:clean-%=%) | tr A-Z a-z)
install:
$(MAKE) install-$(VERSION)
install-%:
@if [ ! -e $(YESDIR) ]; then \
echo "Library $(PKGNAM) Version=$(YESDIR) does not exist"; \
elif [ -e $(YESDIR)/Install.sh ]; then \
echo "Installing $(PKGNAM) version=$(YESDIR)" ; \
cd $(YESDIR) ;\
$(SHELL) Install.sh $(HOMEDIR) 1 ;\
elif [ -e $(YESDIR)/Makefile ]; then \
cd $(YESDIR); \
$(MAKE); \
else \
echo "Installation instruction for $(@:install-%=%) Version=$(YESDIR) does not exist"; \
fi;
clean:
@$(MAKE) clean-$(VERSION)
clean-%:
@if [! -e ${NODIR} ]; then ;\
echo "Library does not exist $(PKGNAM) version=$(NODIR)" ; \
else \
cd $(NODIR) ;\
echo "Installing $(PKGNAM) version=$(NODIR)" ; \
$(SHELL) Install.sh $(HOMEDIR) 0 ;\
fi;
这个makefile在每个版本的库目录中调用不同的bash文件来构建它们,如果我从终端调用它们,bash文件可以成功构建每个库,当我从make文件中调用它们时,
make install
执行install.sh并构建库后,我收到此错误
没有规定制定目标' w'。停止。
任何想法为什么会发生,我怎么能摆脱它?
如果有帮助,HERE是bash文件:
if (test $2 = 1) then
make --silent -f Makefile config prefix=$1/exec
make --silent -f Makefile
make --silent -f Makefile install
elif (test $2 = 0) then
make --silent -f Makefile clean
fi
由于
答案 0 :(得分:0)
问题是由在Install.sh中调用的库的makefile中使用-C调用其他Makefile引起的。这会自动将MAKEFLAGS设置为w。不幸的是,图书馆的开发人员在调用makefile时犯了错误:
$(MAKE)-C $(SUBDIR)$ @ $(MAKEFLAGS)
当从另一个makefile调用makefile时,此MAKEFLAGS被设置为w,但是在从终端调用的bash中它们是空的。因为开发人员忘记在标志之前添加MAKEFLAGS =,它假定w是另一个目标,因为它没有定义,所以它会产生错误,我是menotiond。
我通过更改下面的makefile解决了这个问题:
$(MAKE)-c $(SUBDIR)$ @ MAKEFLAGS = $(MAKEFLAGS)
现在一切都按预期工作了。