Присвоить стандартное состояние выхода переменной makefile

Я пытаюсь сохранить стандартное состояние завершения команды в переменной моего make-файла, но я не знаю, как это сделать.

Я пробовал это:

pruebas:
    @A= $(ls)

... но это не работает.

1
задан 7 January 2012 в 13:24

1 ответ

Вы можете выполнить команду в оболочке из Makefile, используя синтаксис $(shell command). Например, если вы хотите выйти из состояния команды ls в bash, введите:

ls --qwfpgjl > /dev/null 2>&1 ; echo $?

Это может потребовать некоторого объяснения: часть > /dev/null 2>&1 перенаправляет как стандартный вывод, так и стандартную ошибку в / dev / null, поэтому вы не видите никакого вывода, а затем 'echo $?' печатает состояние выхода последней команды. Вы можете попробовать это в командной строке, чтобы увидеть, работает ли он для вас, например,

ls --qwfpgjl > /dev/null 2>&1 ; echo $?

должен дать вам

2

, так как это ошибка ls, когда неизвестный аргумент (см. справочную страницу ls ).

Теперь, как включить это в ваш Makefile? Просто добавьте строку

A=$(shell ls > /dev/null 2>&1 ; echo $?)

в ваш Makefile. Обратите внимание на дополнительный $ в $?, он говорит make, что $? не является переменной в Makefile.

1126 Так и должно быть! Здесь вы можете увидеть Makefile, который я использовал для проверки этого поведения:

#SHELL := /bin/bash
A=$(shell ls > /dev/null 2>&1 ; echo $? )

test:
    @echo $A
.PHONY: test

Примечания:
make по умолчанию выбирает оболочку /bin/sh , но вы можете переопределить это, установив

SHELL := /bin/bash

Это может быть полезно для более сложных команд, которые не выполняются в /bin/sh.

0
ответ дан 7 January 2012 в 13:24

Другие вопросы по тегам:

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