Qual shell é usado nos arquivos GNU Make?

4

Eu vi coisas como echo , mv , if , for , nas regras do makefile. Alguns tipos de comandos de shell parecem ser reconhecidos. Isso é uma festa? Como posso descobrir qual shell está sendo usada e uma lista completa de palavras-chave disponíveis para mim?

    
por tarabyte 20.07.2015 / 21:40

2 respostas

10

É sh :

The execution line shall then be executed by a shell as if it were passed as the argument to the system() interface

system() usa sh . Você pode definitivamente usar as palavras-chave da Linguagem de Comando do POSIX Shell e quaisquer comandos que não sejam de palavras-chave que você espera estar disponível em sua plataforma host.

sh no seu sistema pode, na verdade, ser outro nome para um shell diferente (como bash ). Nesse caso, você teria mais opções disponíveis. Esse tipo de makefile não será portátil, no entanto.

Como você pergunta sobre o GNU make especificamente, eu também notarei que ele permite que você especifica um shell diferente para usar no makefile, mas esse makefile novamente não será portável para outras implementações de make . O GNU make usa sh por padrão, conforme POSIX especifica.

    
por 20.07.2015 / 21:52
1

@Michael (+1) disse tudo (e deu indicações para os detalhes). No entanto, vou enfatizar um par de detalhes (por favor corrija-me):

  1. faça ações usando "sh"

  2. se for útil no gnumake, podemos redefinir o shell

    SHELL = bash

e use truques bash.

  1. (em um ambiente baseado em unix) - mv , echo são comandos (podemos usá-los em qualquer shell) if e for são sh / bash dependem.

  2. as conchas têm um comportamento diferente em relação às citações, (e também globs e var expansions ...) e make também tem um comportamento peculiar sobre eles.

  3. no windows, etc, juntamente com a instalação do gnumake comando, pode ser útil instalar algum tipo de kit sobrevivente Unix (sh / bash, alguns filtros, atributos de arquivo e os comandos que você normalmente usa nas ações do make)

por 21.07.2015 / 09:52

Tags