从Finder运行Makefile


8

我经常在各种项目(LaTeX文章,编程资料)的源目录中使用Finder进行旅行,该项目的编译工作由a进行Makefile。我想知道是否有一种简单的方法(Service菜单,Automator等等)make直接从Finder(右键单击某些东西)直接在好目录中调用相应的命令()。

我正在运行OS X 10.8。

预先感谢您的建议


不确定100%Finder make-ing,但是,您可以打开“终端”窗口并键入,make然后将拖入Makefile终端以将路径复制到该终端。
2013年

1
@ 2rs2ts,如果您采用这种方式,请make -C 在拖动之前输入Makefile
lhf

@lhf当然可以。
2013年

1
添加到@ 2rs2ts中,您可能确实希望在终端机或编辑器中查看该错误消息
user151019 2013年

Answers:


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 2013年

0

承认,这是一种笨拙的方法,但总比没有好:

创建一个名为makeit.command的文本文件,然后在其中放入一行文本:

make

然后修改文件755

chmod 755 makeit.command 

如果要运行make,请将其拖动/复制到该文件夹​​,然后双击它。


1
在这种情况下,当前目录是什么?我认为这不是Makefile所在的位置,因此make可能会失败
user151019 2013年

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

现在,双击Makeitmake在同一文件夹上调用。您可以在调用make或随意编辑时添加其他任何参数Makeit

此解决方案有效,但可能并不十分方便,因为Makeit每个文件夹中都需要一个副本。


0

我喜欢Lauri Ranta的AppleScript答案。我自己正在做这样的事情,以便能够使用Finder定位文件夹并在Finder中选择的目录中创建git存储库。

我可以看到您可能还要在文件夹上调用make命令的位置。

在我看来,能够使用Finder的GUI很好,并且您可能想对所选目录做很多事情。

连接到所选目录

我认为,此Automator Service比对AppleScript内部目录发出任何类型的命令更通用,它使您可以输入想要的任何shell命令。

-编辑-

抱歉,我上面的帖子没有回答原始问题。这是指向另存为服务的Automator工作流程的链接,该工作流程在Finder中选择的目录上运行make命令:

运行make

我尝试了我的这项新服务,但我不喜欢它,因为有时您可能想要执行shell命令“ make”,而有时您可能想要执行shell命令“ make && make install”,或者您可能想要建立一个不同的目标“ make fullbuild”之类的东西。这就是为什么我认为最好的服务是“连接到所选目录”。


这如何回答似乎是一般性评论但没有确切答案的问题
2013年

对不起。我的意思是提供一个准确的答案,并提供指向已完成代码的链接,该代码在下载后将作为服务安装。
凯德尔2013年

已经有一个预安装的服务(文件夹中的新终端),其功能与第二个服务相同。
Lri

@“劳里·兰塔”谢谢。您确定是知识渊博的。我尝试了服务“文件夹中的新终端”,但该服务对我不起作用,因为我在“ .bash_profile”中设置了默认目录。出于某种原因,我的服务:“连接到所选目录”对我有用,但服务:“文件夹中的新终端”确实打开了Terminal.app,但未正确设置当前目录。我得到在“ .bash_profile”中设置的当前目录。
凯德尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.