Quel shell est utilisé dans les files GNU Make?

J'ai vu des choses comme echo , mv , if , for , dans les règles makefile. Certaines commands shell semblent être reconnues. Est-ce bash? Comment puis-je déterminer quel shell est utilisé et la list complète des mots keys disponibles pour moi?

    C'est sh :

    La ligne d'exécution doit alors être exécutée par un interpréteur de commands comme si elle était transmise en tant qu'argument à l'interface system ()

    system() utilise sh . Vous pouvez certainement utiliser les mots-keys du langage POSIX Shell Command Language et les commands autres que les mots keys que vous prévoyez d'être disponibles sur votre plate-forme hôte.

    sh sur votre système peut en fait être un autre nom pour un shell différent (comme bash ), auquel cas vous auriez plus d'options disponibles. Ce genre de makefile ne sera pas portable, cependant.

    Comme vous le requestz spécifiquement sur GNU make, je noterai également qu'il vous permet de spécifier un shell différent à utiliser dans le makefile, mais que makefile ne sera pas encore portable pour d'autres implémentations de make . GNU make utilise sh par défaut, comme le spécifie POSIX.

    @ Michael (+1) a tout dit (et a donné des indications pour les détails). Néanless, je mettrai l'accent sur une paire de détails (corrigez-moi s'il vous plaît):

    1. faire des actions utilise "sh"

    2. si utile dans gnumake on peut redéfinir shell

      SHELL = bash

    et utiliser des astuces bash.

    1. (dans un environnement basé sur unix) – mv , echo sont des commands (nous pouvons les utiliser dans n'importe quel shell) if et for sh / bash dépendent.

    2. les coquilles ont un comportement différent vis-à-vis des citations (et aussi des globs et des extensions de var …) et ont aussi un comportement particulier à leur sujet.

    3. dans les windows, etc., avec l'installation de la command gnumake, il peut être utile d'installer une sorte de kit survivant Unix (sh / bash, certains filters, fileutils et les commands que vous utilisez habituellement dans make actions)