Как сохранить вывод выполнения команды командной оболочки в переменную в makefile?

Как можно получить и проверить версию PowerShell при обработке makefile в nmake? Я пробовал использовать переменную окружения, но это не сработало. Я также пробовал проверить версию напрямую, но ожидается код завершения, а не возвращаемое значение. Я также попытался присвоить команду переменной и вызвать ее в условии проверки, но это тоже не сработало. У меня закончились идеи, что еще можно попробовать?
  • 18 октября 2023 г. 22:17
Ответы на вопрос 3
В Makefile можно сохранить вывод выполнения команды командной оболочки в переменную, используя конструкцию $(shell):

```
VAR_NAME := $(shell command)
```

где VAR_NAME - имя переменной, в которую будет сохранен вывод команды, а command - команда командной оболочки.

Например, чтобы сохранить вывод команды "powershell --version", можно использовать следующую конструкцию:

```
PS_VERSION := $(shell powershell --version)
```

Чтобы проверить версию PowerShell, можно использовать условную конструкцию ifeq:

```
ifeq ($(PS_VERSION), версия_которую_нужно_проверить)
    # действия, если условие истинно
else
    # действия, если условие ложно
endif
```

Вместо "версия_которую_нужно_проверить" нужно указать конкретную версию PowerShell, с которой нужно сравнивать.

Также стоит проверить, что команда "powershell" доступна и может быть вызвана из Makefile, так как в переменную может быть сохранен пустой вывод, если команда не найдена.
В командной строке:
for /F %i in ('powershell.exe $PSVersionTable.PSVersion.Major') do set PSVER=%i
Если вы используете эту команду в пакетном файле, замените %i на %%i
Похожие вопросы