2013-04-06 1 views
0

У меня есть один верхний уровень Makefile. Проект имеет несколько поддиректорий различной глубины.Как запустить марку из подкаталога

Как я могу запустить make из любого подкаталога, поэтому он использует Makefile верхнего уровня, так же как git автоматически находит свой каталог верхнего уровня .git?

Состав:

/ 
/a/ 
/b/c 
/Makefile 
/Readme 

Сценарий:

/$ make 
... Works ... 
/b$ make 
... Cannot find makefile 

Я хотел бы 2-й сценарий, чтобы сделать то же самое, как и первый.

Совет, было бы идеально служить :make правила в vi, но не должен быть VI конкретными

Новых данные:/не корневой каталог, только корень проекта, реальная цель заключается в mimic git

+0

Как о 'псевдоним сделать = "сделать -f/Makefile"'? – Beta

+0

Трюк - это mimic git –

+0

@beta/не является корневым каталогом, только корень проекта, извините –

ответ

1
#!/bin/bash 

HERE=$PWD 

while ! [ -f Makefile ] && [ $PWD != "/" ] 
do 
cd .. 
done 

MFILE=$PWD/Makefile 

cd $HERE 
make -f $MFILE 
+0

Остерегайтесь бесконечного цикла, если Makefile не найден. Принимая это, поскольку вы сделали первые комментарии, которые привели к этому. –

+0

@SteveSchnepp: Забавно, я подумал об этом, а потом забыл его вставить. Исправлено. – Beta

2

Подсказка по бетам будет работать. создать псевдоним

alias make=`sh /home/makecrawl.sh` 

где makecrawl.sh будет выглядеть

#! /bin/bash 
while ! [ -f makefile ] && [$PWD != "/" ] 
do 
cd .. 
done 
make 
+1

+1, но остерегайтесь бесконечного цикла –

+0

@steve schnepp: спасибо за предупреждение .. пока! [-f Makefile] && [$ PWD! = "/"] будет работать –