Я не понимаю, что приведенная ниже команда командной строки. Что означает «[! -f»?Что означает «! -f» в файле make?
[ ! -f $(KERNEL_OUT)/drivers/eu.ko ] || \
cp $(KERNEL_OUT)/drivers/eu.ko $(TARGET_OUT)/lib/
Я не понимаю, что приведенная ниже команда командной строки. Что означает «[! -f»?Что означает «! -f» в файле make?
[ ! -f $(KERNEL_OUT)/drivers/eu.ko ] || \
cp $(KERNEL_OUT)/drivers/eu.ko $(TARGET_OUT)/lib/
Вы уже выяснили, из документации, которая
[ ! -f $(KERNEL_OUT)/drivers/eu.ko ]
проверяет, что файл не существует, и вы уже знаете, что
cp $(KERNEL_OUT)/drivers/eu.ko $(TARGET_OUT)/lib/
экземпляры файл. Поэтому [ ! -f ... ] || cp ...
копирует файл только в том случае, если он существует: его можно прочитать как «файл не существует, иначе файл будет скопирован».
Обычно вы можете написать его как
[ -f ... ] && cp ...
Однако, если файл не существует, это было бы выйти с не нулевым кодом состояния: код состояния будет равен нулю, только если файл существует и был успешно скопирован. Цель здесь состоит в том, чтобы не рассматривать несуществование файла как условие ошибки, поэтому логика должна быть инвертирована.
спасибо за пояснительный ответ :) –
Команды в файле Makefile являются командами оболочки и (за редким исключением) не предназначены для использования make. В типичной системе (и я имею в виду тот, который использует bash), вы можете запустить 'help [', чтобы найти краткое упоминание о том, что это как команда 'test', и' help test', чтобы найти больше информации , – hvd
спасибо, я знал, что, как-то я думал, что это может быть связано с make –
[команда оценивает условную в соответствии с помощью, эта строка все еще не имеет смысла на мне если файл не существует или скопировать файл в blabla? –