Запустите 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 отобразит диалоговое окно с сообщением об ошибке, если сценарий завершится с ошибкой.


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

0

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

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

make

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

chmod 755 makeit.command 

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


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в каждой папке.


0

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

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

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

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

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

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

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

Run Make

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


Как это отвечает на вопрос, это кажется общими комментариями, но не точным ответом
user151019

Мне жаль. Я хотел дать точный ответ со ссылкой на готовый код, который при загрузке установил бы как Сервис.
Кейделл

Уже есть предустановленная служба (Новый терминал в папке), которая выполняет ту же функцию, что и вторая служба.
Лри

@ "Лаури Ранта" Спасибо. Вы уверены, что осведомлены. Я попробовал услугу «Новый терминал в папке», она не работала для меня, я думаю, потому что я установил каталог по умолчанию в моем «.bash_profile». По какой-то причине мой Сервис: «Подключиться к выбранному каталогу» работает у меня, но Сервис: «Новый терминал в папке» открывает Terminal.app, но он не устанавливает текущий каталог правильно. Я получаю текущий каталог, который установлен в моем ".bash_profile".
Кейделл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.