Makefile и sub makefile, фальшивая задача, ничего не поделаешь - PullRequest
0 голосов
/ 13 февраля 2012

Дерево каталогов

.
| Makefile
| src
    | Makefile
| spec
| test

in ./Makefile

default: all

.DEFAULT: 
    $(MAKE) -C $@

в src / Makefile

.PHONY: all spec test ...

spec:
    bundle exec cucumber ../spec

Когда я нахожусь в каталоге src, «make spec» работает хорошо.

..././src/# make spec
blablabla

Но когда я нахожусь в корневом каталоге, я понимаю, что «ничего не поделаешь», но это фальшивая цель

..././# make spec
make: Nothing to be done for `spec'.

Я полагаю, что это проблема с именем задачи, которое совпадает с именем каталога с вложенным make-файлом.

1 Ответ

0 голосов
/ 13 февраля 2012

Я полагаю, что это проблема с именем задачи, совпадающим с именем каталога, с вложенным make-файлом.

Да.

Попробуйте что-то вроде:

all :

forward_ : ;

% : forward_
    $(MAKE) -C $@

.PHONY : all forward_

Phony forward_ target должен вызывать переоценку % target, даже если существует существующий файл или каталог с $@ name.

...