Jonathan Ong
Jonathan Ong

Reputation: 20315

Sublime Text Build System that just "make"

I'm trying to build my project by simple executing make in the top directory. However, when I do, I get the following error:

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

This is after setting the build configuration to Make.

I'm on Sublime Text 2.0.1, OS X 10.8.2. My Makefile consists of executing globally installed node.js binaries. What do I have to do?

Upvotes: 12

Views: 21032

Answers (3)

got here
got here

Reputation: 429

If your makefile works by going to the directory its in and typing make, then this custom sublime-build file works:

 {  
      "working_dir": "${file_path}",  
      "cmd": ["make"],  
      "variants":  
 [  
   {  
        "working_dir": "${file_path}",  
     "name": "Run",  
     "cmd": ["./a.out"]  
   }  
 ]  
 }  

Upvotes: 0

dbn
dbn

Reputation: 13920

This is because make is not in your PATH. If you can build in the terminal, use which make to figure out the path to make, and then add that to the path for build. You can edit the makefile build system to add your path.

Your new makefile rule should look like:

{
   "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"]
      }
    ]
}

This is basically the default make target, but I added to the PATH, and (of course) a test target. You may have to extend the PATH to find gcc, ifort, or whatever you are using to compile. Use : to separate directories on Linux and Mac, and ; on Windows. You can also change other environment variables, I had to set DYLD_LIBRARY_PATH and CPATH so that my libraries and include directories would be available.

It should be saved as Make (OSX).sublime-build in the User directory of your Sublime preferences. The (OSX) will ensure that this file is only used on Mac, so when you copy your preferences to a non-mac computer, you won't gunk up the path.

Upvotes: 15

schlamar
schlamar

Reputation: 9511

A much preferable solution is IMO to adjust the PATH in a plugin, so you have to set it just once for all build systems and all plugins calling external commands.

You can just do

import os
os.environ['PATH'] += os.pathsep + '/my/extra/path'

Real world example lives at https://github.com/schlamar/ST3User/blob/master/preferences.py

Upvotes: 1

Related Questions