【问题标题】:Makefile issue with calling another shell file for make调用另一个 shell 文件进行 make 的 Makefile 问题
【发布时间】:2017-01-04 21:02:50
【问题描述】:

我已经创建了一个父 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文件中调用它们时,

进行安装

在它执行 install.sh 并构建库之后,我得到了这个错误

没有将目标设为“w”的规则。停下来。

知道为什么会发生这种情况,我该如何摆脱它?

如果有帮助,这里是 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

谢谢

【问题讨论】:

  • 生成目标的命令必须缩进。
  • 它们在makefile中,我不知道如何缩进它们。
  • 粘贴正确缩进的代码,用鼠标标记,输入Ctl-k。
  • 现在格式正确,有什么解决办法吗?

标签: bash shell makefile


【解决方案1】:

问题是由在 Install.sh 中调用的库的 makefile 中使用 -C 调用其他 Makefile 引起的。这会自动将 MAKEFLAGS 设置为 w。不幸的是,该库的开发人员在调用 makefile 时犯了如下错误:

$(MAKE) -C $(SUBDIR) $@ $(MAKEFLAGS)

当从另一个makefile 调用makefile 时,这个MAKEFLAGS 被设置为w,但是在从终端调用的bash 中它们是空的。因为开发人员忘记在标志之前添加 MAKEFLAGS=,它假设 w 是另一个目标,并且因为它没有定义它会产生错误,我提到了。

我通过如下更改他们的 makefile 解决了这个问题:

$(MAKE) -c $(SUBDIR) $@ MAKEFLAGS=$(MAKEFLAGS)

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多