Exécutez Makefile à partir du Finder

8

Je voyage souvent en utilisant Finder dans les répertoires sources de divers projets (articles LaTeX, programmation) pour lesquels la compilation est pilotée par a Makefile. Je me demandais s'il y avait un moyen simple (menu Service, Automator que ce soit) d'invoquer la commande correspondante ( make) dans le bon répertoire directement depuis Finder (clic droit sur quelque chose).

J'utilise OS X 10.8.

Merci d'avance pour vos suggestions

Sébastien Varrette
la source
Vous n'êtes pas sûr de la recherche à 100% make, mais vous pouvez ouvrir une fenêtre de terminal et taper makepuis faire glisser le Makefiledans le terminal pour copier le chemin d'accès.
2rs2ts
1
@ 2rs2ts, si vous procédez de cette façon, tapez make -C avant de faire glisser le Makefile.
lhf
@lhf Ah oui, bien sûr.
2rs2ts
1
En ajoutant à @ 2rs2ts, vous voulez probablement que la marque soit dans un terminal ou depuis un éditeur pour voir les messages d'erreur
user151019

Réponses:

3

Vous pouvez utiliser une fonction comme celle-ci:

fmake() {
  cd "$(osascript -e 'tell application "Finder"
      POSIX path of (target of Finder window 1 as alias)
  end tell' 2> /dev/null)"
  make && make install
}

Ou enregistrez une fonction juste pour la commande cd et utilisez history-search-backward pour exécuter quelque chose comme cdf && make && make install.

Ou ouvrez Automator, choisissez le modèle de service, définissez le type d'entrée sur aucune entrée et ajoutez une action Exécuter AppleScript comme ceci:

try
    tell application "Finder"
        POSIX path of (target of Finder window 1 as alias)
    end tell
    tell application "Terminal"
        do script "cd " & quoted form of result & " && make && make install"
        activate
    end tell
end

Sans le bloc try, Automator afficherait une boîte de dialogue d'erreur si le script se termine avec une erreur.

Lri
la source
Vous pouvez également diriger le stdout et std de voir des erreurs ou du moins rapide où le journal des erreurs est
user151019
0

Certes, c'est une façon maladroite mais peut-être mieux que rien:

créez un fichier texte nommé makeit.command et insérez simplement une ligne de texte dedans:

make

Ensuite, modifiez le fichier 755

chmod 755 makeit.command 

Si vous souhaitez exécuter une marque, faites-la glisser / copier dans ce dossier, puis double-cliquez dessus.

The-Dood
la source
1
Dans ce cas, quel est le répertoire actuel? Je ne pense pas que ce sera là où se trouve le Makefile et donc la marque échouera probablement
user151019
0

J'ai essayé d'ajouter #!/usr/bin/make -fcomme première ligne de Makefileet de le rendre exécutable mais il ne s'exécute pas dans le bon dossier. J'ai donc opté pour une solution dans le sens de la réponse de The-Dood.

Ouvrez un terminal et accédez au dossier dans lequel vous avez votre projet Makefile, puis tapez ceci:

cat <<EOF > Makeit
make -C `dirname $_`
echo 'Press enter to continue'
read
EOF
chmod +x Makeit

Maintenant, un double-clic Makeitdevrait être invoqué makesur le même dossier. Vous pouvez ajouter tout autre argument lors de l'appel makeou de la modification Makeità volonté.

Cette solution fonctionne mais elle peut ne pas être très pratique car vous avez besoin d'une copie de Makeitdans chaque dossier.

lhf
la source
0

J'aime la réponse AppleScript de Lauri Ranta. Je travaillais sur une telle chose pour moi-même pour pouvoir utiliser le Finder pour localiser un dossier et créer un référentiel git dans un répertoire sélectionné dans le Finder.

Je peux voir où vous pouvez également appeler la commande make sur un dossier.

Il me semble que ce serait bien de pouvoir utiliser l'interface graphique du Finder et que vous voudriez peut-être faire beaucoup de choses avec le répertoire sélectionné.

Se connecter au répertoire sélectionné

Je pense que ce service Automator est plus général que d'émettre n'importe quel type de commande pour un répertoire à l'intérieur d'AppleScript et il vous prépare à entrer la commande shell que vous souhaitez.

--- Éditer ---

Je suis désolé, mon message ci-dessus n'a pas répondu à la question d'origine. Voici un lien vers un workflow Automator enregistré en tant que service qui exécute la commande make sur le répertoire sélectionné dans le Finder:

Exécutez Make

J'ai essayé mon nouveau service et je ne l'ai pas aimé parce que parfois vous voudrez peut-être faire la commande shell "make" et d'autres fois vous voudrez peut-être faire la commande shell "make && make install", ou vous voudrez peut-être construire une cible différente "make fullbuild" ou quelque chose. C'est pourquoi je pensais qu'un service appelé "Se connecter à l'annuaire sélectionné" serait le meilleur.

Kaydell
la source
Comment cela répond-il à la question, il semble qu'il s'agisse de commentaires généraux mais pas de réponse exacte
user151019
Je suis désolé. Je voulais fournir une réponse exacte avec un lien vers le code fini qui, une fois téléchargé, serait installé en tant que service.
Kaydell
Il existe déjà un service préinstallé (Nouveau terminal dans le dossier) qui fait la même chose que votre deuxième service.
Lri
@ "Lauri Ranta" Merci. Vous êtes bien informé. J'ai essayé le service "New Terminal at Folder" qui ne fonctionnait pas pour moi, je pense car j'ai défini un répertoire par défaut dans mon ".bash_profile". Pour une raison quelconque, mon service: "Se connecter au répertoire sélectionné" fonctionne pour moi, mais le service: "Nouveau terminal dans le dossier" ouvre Terminal.app, mais il ne définit pas correctement le répertoire actuel. J'obtiens un répertoire courant qui est défini dans mon ".bash_profile".
Kaydell