2015-12-06 3 views
1

У меня есть структура каталогов следующим образом:Запуск Makefile, используя сценарий оболочки

 
. 
├── one 
│   ├── one_one 
│   │   └── one_one_one 
│   │    ├── Makefile 
│   │    └── one_one_oneTest.cpp 
│   └── one_two 
│    ├── Makefile 
│    └── one_twoTest.cpp 
├── three 
│   ├── Makefile 
│   └── threeTest.cpp 
└── two 
    └── two_one 
     ├── Makefile 
     └── two_oneTest.cpp 

Я хочу, чтобы запустить команду грим, где я когда-либо найти Makefile. Итак, я написал сценарий оболочки следующим образом.

#!/bin/bash 
find . -type f -name Makefile -exec make \; 

Но это дает ошибку говоря make: *** No targets specified and no makefile found. Stop.

Если я просто запустить find . -type f -name Makefile, я получаю

./two/two_one/Makefile 
./three/Makefile 
./one/one_two/Makefile 
./one/one_one/one_one_one/Makefile 

который является правильным выходом я ожидал.

Если я запустил Makefile с помощью команды make, он работает правильно, поэтому я думаю, что Makefile верен. Что может быть неправильным в сценарии оболочки?

Просто для справки, один из моих Makefiles выглядит следующим образом:

all: TestTwoOne 

TestTwoOne: two_oneTest.cpp 
    g++ two_oneTest.cpp -o TestTwoOne 

ответ

3

Ваш «текущий каталог» не изменяется в соответствующие подкаталоги для запуска делает. Вместо этого:

find . -type f -name Makefile -execdir make \; 
Смежные вопросы