Как я пишу команду 'CD' в make-файле?

Может быть некоторый беспорядок здесь о какой "K& R C". Термин относится к языку, как зарегистрировано в первый выпуск "Языка программирования C". Примерно разговор: входной язык компилятора C Bell Labs приблизительно 1978.

Kernighan и Ritchie были вовлечены в процесс стандартизации ANSI. "ANSI C" диалект замененный "K& R C" и последующие выпуски "Языка программирования C" принимают соглашения ANSI. "K& R C" "мертвый язык", кроме того, до такой степени, что некоторые компиляторы все еще принимают унаследованный код.

319
задан Mateusz Piotrowski 19 August 2017 в 12:54
поделиться

2 ответа

Он фактически выполняет команду, изменение каталога на 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 там с целью «все». Лучше всего

564
ответ дан 23 November 2019 в 01:00
поделиться

Что вы хотите, чтобы он делал, когда добирался туда? Каждая команда выполняется в подоболочке, поэтому подоболочка меняет каталог, но в конечном итоге следующая команда все еще находится в текущем каталоге.

С помощью GNU make вы можете сделать что-то вроде:

BIN=/bin
foo:
    $(shell cd $(BIN); ls)
9
ответ дан 23 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: