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
.