Запустите Makefile из Finder

8

Я часто путешествую, используя Finder, в исходных каталогах различных проектов (статьи LaTeX, материалы по программированию), для которых компиляция пилотируется a Makefile. Мне было интересно, есть ли простой способ (Сервисное меню, Automator и т. Д.) makeВызвать соответствующую команду ( ) в хорошей директории директории из Finder (щелкнуть правой кнопкой мыши что-то).

Я использую OS X 10.8.

Спасибо заранее за ваши предложения

Себастьян Варретт
источник
Не уверен насчет 100% Finder make-ing, но вы можете открыть окно терминала и набрать, а makeзатем перетащить Makefileв терминал, чтобы скопировать путь к нему.
2rs2ts
1
@ 2rs2ts, если вы идете этим путем, напечатайте make -C перед перетаскиванием Makefile.
LHF
@ lhf Да, конечно.
2rs2ts
1
Добавляя @ 2rs2ts, вы, вероятно, захотите, чтобы make в терминале или в редакторе видел сообщения об ошибках
user151019

Ответы:

3

Вы можете использовать такую ​​функцию:

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
}

Или сохраните функцию только для команды cd и используйте history-search-backward для запуска чего-то подобного cdf && make && make install.

Или откройте Automator, выберите шаблон службы, установите тип ввода без ввода и добавьте действие «Выполнить AppleScript» следующим образом:

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

Без блока try Automator отобразит диалоговое окно с сообщением об ошибке, если сценарий завершится с ошибкой.

LRI
источник
Вы также можете передать stdout и std, чтобы увидеть ошибки или хотя бы подсказать, где находится журнал ошибок
user151019
0

Признаюсь, это неуклюжий способ, но, возможно, лучше, чем ничего:

создайте текстовый файл с именем makeit.command и поместите в него одну строку текста:

make

Затем чомод ​​файл 755

chmod 755 makeit.command 

Если вы хотите запустить make, перетащите / скопируйте его в эту папку и дважды щелкните по нему.

-Dood
источник
1
В таком случае, что является текущим каталогом? Я не думаю, что это будет, где находится Makefile, и поэтому, вероятно, сбой
make
0

Я попытался добавить #!/usr/bin/make -fв качестве первой строки Makefileи сделать его исполняемым, но он не работает в нужной папке. Так что я согласился на решение в соответствии с ответом The-Dood.

Откройте терминал и перейдите в папку, где у вас есть проект, а Makefileзатем введите это:

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

Теперь двойной щелчок Makeitдолжен вызвать makeодну и ту же папку. Вы можете добавлять любые другие аргументы при вызове makeили редактировать Makeitпо желанию.

Это решение работает, но оно может быть не очень удобным, потому что вам нужна копия Makeitв каждой папке.

LHF
источник
0

Мне нравится ответ AppleScript Лаури Ранты. Я работал над тем, чтобы я мог использовать Finder, чтобы найти папку и создать git-репозиторий в каталоге, выбранном в Finder.

Я также вижу, где вы можете вызвать команду make для папки.

Мне кажется, что было бы неплохо иметь возможность использовать графический интерфейс Finder и что вы, возможно, захотите многое сделать с выбранным каталогом.

Подключиться к выбранному каталогу

Я думаю, что эта служба автоматизации является более общей, чем выдача каких-либо команд для каталога внутри AppleScript, и она готовит вас к вводу любой команды оболочки, которую вы хотите.

--- редактировать ---

Извините, мой пост выше не ответил на оригинальный вопрос. Вот ссылка на рабочий процесс Automator, сохраненный как Сервис, который запускает команду make в каталоге, выбранном в Finder:

Run Make

Я попробовал этот новый сервис и мне не понравился, потому что иногда вы можете захотеть выполнить команду оболочки «make», а в других случаях вы можете захотеть выполнить команду оболочки «make && make install», или вы можете захотеть построить другую цель "сделать полную сборку" или что-то. Вот почему я подумал, что лучше всего подойдет служба «Подключиться к выбранному каталогу».

Kaydell
источник
Как это отвечает на вопрос, это кажется общими комментариями, но не точным ответом
user151019
Мне жаль. Я хотел дать точный ответ со ссылкой на готовый код, который при загрузке установил бы как Сервис.
Кейделл
Уже есть предустановленная служба (Новый терминал в папке), которая выполняет ту же функцию, что и вторая служба.
Лри
@ "Лаури Ранта" Спасибо. Вы уверены, что осведомлены. Я попробовал услугу «Новый терминал в папке», она не работала для меня, я думаю, потому что я установил каталог по умолчанию в моем «.bash_profile». По какой-то причине мой Сервис: «Подключиться к выбранному каталогу» работает у меня, но Сервис: «Новый терминал в папке» открывает Terminal.app, но он не устанавливает текущий каталог правильно. Я получаю текущий каталог, который установлен в моем ".bash_profile".
Кейделл