Sublime Text的构建系统,只需使用“make”命令

12

我尝试在项目顶层目录中简单地执行make来构建我的项目。然而,当我这样做时,我会得到以下错误:

[Errno 2] No such file or directory
[cmd:  [u'make']]
[dir:  /Users/jonathanong/Workspace/template]
[path: /usr/local/bin]
[Finished]

在将构建配置设置为Make后,这就是结果。

我使用的是Sublime Text 2.0.1,操作系统为OS X 10.8.2。我的Makefile由执行全局安装的node.js二进制文件组成。我需要做什么?


1
以防Linux用户在搜索这个问题:Ctrl+M用Sublime+Linux运行Makefile - Martin Thoma
3个回答

15
这是因为make没有在您的PATH中。如果您可以在终端上构建,请使用which make查找make的路径,然后将其添加到构建路径中。 您可以编辑makefile build system以添加您的路径。
您的新的makefile规则应该如下所示:
{
   "cmd": ["make"],
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
   "working_dir": "${project_path:${folder:${file_path}}}",
   "selector": "source.makefile",
   "path": "/usr/local/bin:/Applications/Xcode.app/Contents/Developer/usr/bin",
   "variants":
    [
      {
        "name": "Clean",
        "cmd": ["make", "clean"]
      },
      {
        "name": "Test",
        "cmd": ["make", "test"]
      }
    ]
}

这基本上是默认的make目标,但我添加了路径,并加入了(当然)测试目标。如果要编译时使用gcc、ifort或类似工具,你可能需要扩展路径。在Linux和Mac上,请使用:分隔目录,在Windows上请使用;您还可以更改其他环境变量,我必须设置DYLD_LIBRARY_PATH和CPATH,以便我的库和包含目录可用。

它应该保存为Make (OSX).sublime-build,位于Sublime首选项中的用户目录下。 (OSX) 会确保此文件仅在Mac上使用,因此将首选项复制到非Mac计算机时,您不会弄乱路径。


这是否意味着我需要为每个项目都创建一个构建文件? - Jonathan Ong
你可以同时拥有用户级别的构建文件和项目级别的构建文件。 - dbn
好的,我的路径是/usr/bin/make,所以我把/usr/bin设置为我的路径。现在出现了make: component: No such file or directory错误。我猜我需要让Sublime Text知道/usr/local/bin/component和/或/usr/local/bin。我该怎么做呢? - Jonathan Ong
好的,/user/bin:/user/local/bin 可以正常工作。不确定为什么 : 是分隔符。谢谢! - Jonathan Ong
1
只需在ST控制台中键入import os; os.environ['PATH'],即可使用所使用的PATH... - schlamar
显示剩余5条评论

1
一种更可取的解决方案是,在插件中调整PATH,这样您只需为所有构建系统和调用外部命令的所有插件设置一次即可。
您可以这样做:
import os
os.environ['PATH'] += os.pathsep + '/my/extra/path'

一个现实世界的例子在这里 https://github.com/schlamar/ST3User/blob/master/preferences.py


0
如果你的 makefile 是通过进入所在目录并输入 "make" 来工作的,那么这个自定义 sublime-build 文件 this 就适用:
 {  
      "working_dir": "${file_path}",  
      "cmd": ["make"],  
      "variants":  
 [  
   {  
        "working_dir": "${file_path}",  
     "name": "Run",  
     "cmd": ["./a.out"]  
   }  
 ]  
 }  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接