2017-01-04 1 views
-2

Я создал родительский make-файл. как показано ниже:Ошибка в Makefile с вызовом другого файла оболочки для make

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 вызывает различные файлы Баш внутри каждой версии библиотеки каталогов построить их, Баш файлы могут успешно строить каждую библиотеку, если я называю ее из терминала, Тхо, когда я называю их от моего сделать файл, используя,

сделать установки

после того, как он выполняет install.sh и построить библиотеку, я получаю эту ошибку,

Нет правила для цели «w». Стоп.

любая идея, почему это происходит и как я могу избавиться от нее?

ЗДЕСЬ файл Баш, если это поможет:

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

Команды для создания цели должны быть отступом. – Barmar

+0

Они находятся в файле makefile, я не знаю, как отложить их здесь. – apramc

+0

http://stackoverflow.com/help/formatting – Barmar

ответ

0

Проблема была вызвана вызовом других Makefiles с использованием -C в Makefile библиотеки называется в INSTALL.sh. Это автоматически устанавливает MAKEFLAGS в w. К сожалению, разработчики библиотеки сделал ошибку вызова мейкфайлы, как показано ниже:

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

когда Makefile называется из другого файла makefile эти MAKEFLAGS установлены в w, но в bash, вызванном с терминала, они пусты. потому что разработчики забыли добавить MAKEFLAGS = перед флагами, он предполагает, что w является другой целью, и поскольку он не определен, он генерирует ошибку, я использую.

Я решил проблему, изменив их Makefile, как показано ниже:

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

и теперь все работает ожидается.

Смежные вопросы