Это фактически выполнение команды, изменение каталога на 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
по какой-либо причине произойдет сбой.
Однако обычно используется вызов make в подкаталоге, который вы можете посмотреть. Для этого есть опция командной строки, поэтому вам не нужно называть cd
себя, поэтому ваше правило будет выглядеть так
all:
$(MAKE) -C some_dir all
который изменится some_dir
и выполнит Makefile
там с целью "все". Рекомендуется использовать $(MAKE)
вместо make
непосредственного вызова , так как он позаботится о том, чтобы вызвать правильный экземпляр make (если вы, например, используете специальную версию make для вашей среды сборки), а также обеспечить несколько другое поведение при запуске используя определенные переключатели, такие как -t
.
Для записи make всегда повторяет команду, которую она выполняет (если она явно не подавлена), даже если у нее нет вывода, что вы и видите.
make
, я никогда не хотел менять каталог таким образом. Может быть, вам стоит попробовать другой подход к вашему решению?