2015-05-20 3 views
-1

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

-->projects 
    -->proj1 
     --Makefile 
    -->proj2 
     --Makefile 
    -->proj3 
     --Makefile 
    ... 

Как я могу запустить эти несколько мейкфайлы с помощью команды:

make --makefile proj*/Makefile all 

Если я пытаюсь это, текущий Рабочий каталог - это «проекты». Как я могу изменить это до вызова «все». У меня есть зависимости для создания «все» (а также во многих других местах), которые уже нуждаются в правильном рабочем каталоге, поэтому я не хотел бы слишком сильно изменять Makefile.

Спасибо

+0

Вы хотите запустить все три make-файла в 'projects /' или каждый в своем собственном каталоге? – Beta

+0

Каждый в своем собственном каталоге. Моя проблема в том, что если я запустил строку кода в папке «projects», это станет cwd. И Makefiles написаны для использования cdd их местоположения – Zdovc

ответ

0

Технически, чтобы запустить make в другом каталоге, вы можете сделать это с --directory=каталога. См. make man page.

Проблема, которую вы здесь описываете, представляет собой проблему recursive make. Есть те, кто считает это плохо (google «Recursive make считают вредным»).


Я должен добавить, что если вы пишете этот проект сейчас, я не пошел бы с make напрямую, но с некоторыми higher-level build system.

+0

Я пробовал «make -directory = proj * all», и это не сработало. Или вы имели в виду что-то еще? – Zdovc

+0

См. Обновление для рекурсивного make, которое, я думаю, более подходящее описание вашего вопроса. –

+0

Я читал о рекурсивном make, и я не думаю, что это то, что я хочу сделать (хотя похожие проблемы появляются там). У меня нет одного проекта с подпапками. У меня действительно будет много разных проектов, которые я хочу скомпилировать с помощью одного шага командой оболочки.
Спасибо за подсказку по использованию системы сборки более высокого уровня – Zdovc

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