Це фактично виконання команди, зміна каталогу на some_directory
, однак, це виконується в оболонці підпроцесу і не впливає ні на make, ні на оболонку, з якої ви працюєте.
Якщо ви хочете виконати більше завдань всередині some_directory
, вам потрібно додати крапку з комою та додати також інші команди. Зауважте, що ви не можете використовувати нові рядки, оскільки вони інтерпретуються символом make як кінець правила, тому будь-які нові рядки, які ви використовуєте для наочності, повинні бути усунені зворотною косою рисою.
Наприклад:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Зауважте також, що крапка з комою необхідна між кожною командою, навіть якщо ви додаєте зворотній косу рису та новий рядок. Це пов’язано з тим, що вся струна розбита оболонкою як один рядок. Як зазначено в коментарях, ви повинні використовувати "&&" для приєднання команд, що означає, що вони виконуються лише в тому випадку, коли попередня команда була успішною.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Це особливо важливо при руйнівних роботах, таких як прибирання, оскільки в іншому випадку ви знищите неправильні речі, якщо з cd
будь-якої причини вийде з ладу.
Хоча загальне використання - це зробити дзвінок в підкаталозі, в який ви можете заглянути. Для цього є варіант командного рядка, тому вам не потрібно називати cd
себе, тому ваше правило виглядатиме так
all:
$(MAKE) -C some_dir all
який перетвориться на some_dir
та виконає Makefile
там з ціллю "всі". Як найкраща практика, використовуйте $(MAKE)
замість make
прямого виклику , оскільки ви подбаєте про виклик потрібного екземпляра make (якщо, наприклад, ви використовуєте спеціальну версію make для свого середовища побудови), а також надайте дещо іншу поведінку під час запуску за допомогою певних комутаторів, таких як -t
.
Для запису завжди повторюйте команду, яку вона виконує (якщо явно не придушено), навіть якщо вона не має виводу, що саме ви бачите.
make
, я ніколи не хотів змінювати каталог, як цей. Можливо, вам варто спробувати інший підхід до свого рішення?