Ejecute Makefile desde Finder

8

A menudo viajo usando Finder en los directorios de origen de varios proyectos (artículos de LaTeX, material de programación) para los cuales a Makefile. Me preguntaba si hay una manera simple (Menú de servicio, Automator lo que sea) para invocar el comando correspondiente ( make) en el directorio bueno directoly desde Finder (clic derecho en algo).

Estoy ejecutando OS X 10.8.

Gracias de antemano por sus sugerencias.

Sebastien Varrette
fuente
No estoy seguro acerca del 100% de Finder make-ing, pero, puede abrir una ventana de Terminal y escribir y makeluego arrastrarlo Makefilea la Terminal para copiar la ruta.
2rs2ts
1
@ 2rs2ts, si va por aquí, escriba make -C antes de arrastrar el Makefile.
lhf
@lhf Ah sí, por supuesto.
2rs2ts
1
Al agregar a @ 2rs2ts, probablemente desee que la marca en un terminal o desde un editor vea los mensajes de error
usuario151019

Respuestas:

3

Podrías usar una función como esta:

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
}

O guarde una función solo para el comando cd y use history-search-backward para ejecutar algo como cdf && make && make install.

O abra Automator, elija la plantilla de Servicio, establezca el tipo de entrada en ninguna entrada y agregue una acción Ejecutar AppleScript como esta:

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

Sin el bloque de prueba, Automator mostraría un cuadro de diálogo de error si el script sale con un error.

Lri
fuente
También puede canalizar el stdout y el std para ver errores o al menos preguntar dónde está el registro de errores
user151019
0

Admitido, esta es una forma torpe, pero tal vez mejor que nada:

cree un archivo de texto llamado makeit.command y solo ponga una línea de texto en él:

make

Entonces chomod el archivo 755

chmod 755 makeit.command 

Si desea ejecutar una marca, arrástrela / cópiela a esa carpeta y luego haga doble clic en ella.

The-Dood
fuente
1
En ese caso, ¿cuál es el directorio actual? No creo que sea donde está el Makefile y, por lo tanto, el make probablemente fallará
user151019
0

Intenté agregar #!/usr/bin/make -fcomo primera línea Makefiley hacer que sea ejecutable, pero no se ejecuta en la carpeta correcta. Así que me decidí por una solución similar a la respuesta de The-Dood.

Abra una terminal y vaya a la carpeta donde tiene su proyecto y Makefileluego escriba esto:

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

Ahora hacer doble clic Makeitdebería invocar makeen la misma carpeta. Puede agregar cualquier otro argumento al llamar makeo editar Makeita voluntad.

Esta solución funciona, pero puede no ser muy conveniente porque necesita una copia de Makeitcada carpeta.

lhf
fuente
0

Me gusta la respuesta AppleScript de Lauri Ranta. Estaba trabajando en algo así para poder usar el Finder para localizar una carpeta y crear un repositorio git en un directorio seleccionado en el Finder.

También puedo ver dónde puede llamar al comando make en una carpeta.

Me parece que sería bueno poder usar la GUI del Finder y que es posible que desee hacer muchas cosas con el directorio seleccionado.

Conectarse al directorio seleccionado

Creo que este servicio de Automator es más general que emitir cualquier tipo de comando para un directorio dentro del AppleScript y lo prepara para ingresar cualquier comando de shell que desee.

--- editar ---

Lo siento, mi publicación anterior no respondió la pregunta original. Aquí hay un enlace a un flujo de trabajo de Automator guardado como un Servicio que ejecuta el comando make en el directorio seleccionado en el Finder:

Run Make

Probé este nuevo servicio mío y no me gustó porque a veces querrás hacer el comando de shell "make" y otras veces querrás hacer el comando de shell "make && make install", o quizás quieras construir un objetivo diferente "hacer fullbuild" o algo así. Es por eso que estaba pensando que un servicio llamado "Conectar al directorio seleccionado" sería lo mejor.

Kaydell
fuente
¿Cómo responde esto a la pregunta? Parece que son comentarios generales pero no una respuesta exacta
user151019
Lo siento. Tenía la intención de proporcionar una respuesta exacta con un enlace al código terminado que, cuando se descarga, se instalará como un Servicio.
Kaydell
Ya existe un servicio preinstalado (Nueva Terminal en la Carpeta) que hace lo mismo que su segundo servicio.
Lri
@ "Lauri Ranta" Gracias. Seguro que estás bien informado. Probé el servicio "Nueva terminal en la carpeta" no funcionó para mí, creo que porque configuré un directorio predeterminado en mi ".bash_profile". Por alguna razón, mi Servicio: "Conectar al directorio seleccionado" funciona para mí, pero el Servicio: "Nueva terminal en la carpeta" abre Terminal.app, pero no establece el directorio actual correctamente. Obtengo un directorio actual que está configurado en mi ".bash_profile".
Kaydell