Execute o Makefile a partir do Finder

8

Costumo viajar usando o Finder nos diretórios de origem de vários projetos (artigos do LaTeX, material de programação) para os quais a compilação é pilotada por a Makefile. Eu queria saber se existe uma maneira simples (menu Serviço, Automator, qualquer que seja) de invocar o comando correspondente ( make) no bom diretório directoly do Finder (clique com o botão direito do mouse em algo).

Estou executando o OS X 10.8.

Agradecemos antecipadamente por suas sugestões

Sebastien Varrette
fonte
Não tenho certeza sobre a localização do 100% Finder make, mas você pode abrir uma janela do Terminal e digitar makee arraste-o Makefilepara dentro do Terminal para copiar o caminho para ele.
2rs2ts
11
@ 2rs2ts, se você for assim, digite make -C antes de arrastar o Makefile.
Lhf 19/06/2013
@lhf Ah sim, claro.
Jun2 '
11
Adicionando @ 2rs2ts, você provavelmente deseja que o make em um terminal ou em um editor veja as mensagens de erro
user151019

Respostas:

3

Você poderia usar uma função 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
}

Ou salve uma função apenas para o comando cd e use history-search-backward para executar algo parecido cdf && make && make install.

Ou abra o Automator, escolha o modelo de Serviço, defina o tipo de entrada como nenhuma entrada e adicione uma ação Executar 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

Sem o bloco try, o Automator mostraria uma caixa de diálogo de erro se o script sair com um erro.

Lri
fonte
Você também pode canalizar a saída padrão e std ver erros ou pelo menos prompt de onde o log de erro é
user151019
0

É verdade que essa é uma maneira desajeitada, mas talvez melhor do que nada:

crie um arquivo de texto chamado makeit.command e apenas coloque uma linha de texto nele:

make

Em seguida, copie o arquivo 755

chmod 755 makeit.command 

Se você deseja executar uma marca, arraste / copie-a para essa pasta e clique duas vezes nela.

The-Dood
fonte
11
Nesse caso, qual é o diretório atual? Eu não acho que vai ser onde o Makefile é e assim a marca provavelmente irá falhar
user151019
0

Tentei adicionar #!/usr/bin/make -fcomo primeira linha Makefilee torná-lo executável, mas não é executado na pasta correta. Por isso, decidi por uma solução na linha da resposta da The-Dood.

Abra um terminal e vá para a pasta onde você projeta e Makefile, em seguida, digite este:

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

Agora, o clique duplo Makeitdeve ser chamado makena mesma pasta. Você pode adicionar outros argumentos ao chamar makeou editar Makeità vontade.

Esta solução funciona, mas pode não ser muito conveniente porque você precisa de uma cópia Makeitem cada pasta.

lhf
fonte
0

Gosto da resposta AppleScript de Lauri Ranta. Eu estava trabalhando nisso para poder usar o Finder para localizar uma pasta e criar um repositório git em um diretório selecionado no Finder.

Eu posso ver onde você pode chamar o comando make em uma pasta também.

Parece-me que seria bom poder usar a GUI do Finder e que você pode querer fazer muitas coisas com o diretório selecionado.

Conectar-se ao diretório selecionado

Penso que este Serviço Automator é mais geral do que emitir qualquer tipo de comando para um diretório dentro do AppleScript e prepara você para inserir qualquer comando shell que desejar.

--- editar ---

Sinto muito, minha postagem acima não respondeu à pergunta original. Aqui está um link para um fluxo de trabalho do Automator salvo como um Serviço que executa o comando make no diretório selecionado no Finder:

Run Make

Eu tentei este meu novo serviço e não gostei, porque às vezes você pode querer executar o comando shell "make" e outras vezes o comando shell "make && make install", ou você pode construir um alvo diferente "make fullbuild" ou algo assim. É por isso que eu estava pensando que um serviço chamado "Conectar-se ao Diretório Selecionado" seria melhor.

Kaydell
fonte
Como é que esta resposta à pergunta que parece ser comentários gerais, mas nenhuma resposta exata
user151019
Eu sinto Muito. Pretendia fornecer uma resposta exata com um link para o código final que, quando baixado, seria instalado como um Serviço.
Kaydell
Já existe um serviço pré-instalado (Novo Terminal na Pasta) que faz a mesma coisa que o seu segundo serviço.
Lri
@ "Lauri Ranta" Obrigado. Você com certeza tem conhecimento. Eu tentei o serviço "Novo terminal na pasta" não funcionou para mim, acho que porque configurei um diretório padrão no meu ".bash_profile". Por alguma razão, meu Serviço: "Conectar-se ao Diretório Selecionado" funciona para mim, mas o Serviço: "Novo Terminal na Pasta" abre o Terminal.app, mas não define o diretório atual corretamente. Eu recebo um diretório atual definido no meu ".bash_profile".
Kaydell