Atribui status de saída padrão a uma variável makefile

1

Estou tentando salvar o status de saída padrão de um comando em uma variável do meu makefile, mas não sei como fazer isso.

Eu tentei isso:

pruebas:
    @A= $(ls)

... mas não funciona.

    
por Motumbo 07.01.2012 / 09:16

1 resposta

4

Você pode executar um comando no shell a partir do Makefile usando a sintaxe $(shell command) . Se, por exemplo, você quiser sair do status do comando ls no bash, digite:

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

Isso pode precisar de alguma explicação: a parte > /dev/null 2>&1 redireciona a saída padrão e o erro padrão para / dev / null, para que você não veja nenhuma saída e, em seguida, "echo $?" imprime o status de saída do último comando. Você pode tentar isso na linha de comando para ver se funciona para você, por exemplo

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

deve dar a você

2

pois esse é o erro ls retorna quando há um argumento desconhecido (consulte a ls man page ).

Agora, como incluir isso no seu Makefile? Basta adicionar a linha

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

para o seu Makefile. Observe o $ extra em $$? , ele diz make que $? não é uma variável no Makefile.

Deve ser isso! Aqui você pode ver o Makefile que usei para testar esse comportamento:

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

test:
    @echo $A
.PHONY: test

Notas:
make seleciona o shell /bin/sh por padrão, mas você pode substituir isso configurando

SHELL := /bin/bash

Isso pode ser útil para comandos mais complicados que não são executados em /bin/sh .

    
por Gerhard Burger 02.07.2012 / 09:41