public
Last active

Getting Sublime Text to build a C++ file.

  • Download Gist
C++.sublime-build
1 2 3 4 5 6 7 8 9
{
"cmd": ["g++", "$file", "-o", "$file_base_name", "-I/usr/local/include"],
"selector": "source.c++",
 
"windows":
{
"cmd": ["cl", "/Fo${file_path}", "/O2", "$file"]
}
}
Cpp.sublime-build
1 2 3 4 5 6 7 8 9 10 11 12
{
"cmd": ["g++ -Wall ${file} -o ${file_base_name} && ./${file_base_name}"], "working_dir": "${file_path}",
"selector": "source.c++",
"shell": true,
 
"windows":
{
"cmd": ["cl", "/Fo${file_path}", "/O2", "$file"],
"selector": "source.c++",
"shell": true
}
}
README.markdown
Markdown

C++ Sublime Text Build

This builds single C++ files in Sublime Text, handy for testing small things.

Works With

  • OSX (Assuming xcode installed)
  • Linux (Should work if g++ is installed)
  • Windows (Need CL working)

Thanks to adnansky for Linux Test and Shell update.

Nice! Do you know why 'g++/gcc' gives an 'error: &&: No such file or directory' with the line
"cmd": ["g++", "$file", "-o", "$file_base_name", "-I/usr/local/include", "&&", "./$file_base_name"],
Under windows it works with "shell:true" option. How can I redirect the output?
Thanks!

Hmmm, I'm not sure, I've not tested this in the newer versions of Sublime so it maybe that somethings changed.

tbh I've had mixed results with this, I need to give it another look, I've also switched to G++ under Windows for this kind of simple one files stuff.

Looking at the string and error you posted I don't know where the "&&" is coming from.

Your examples are correct. After buildind ST2's console shows only [Finished].
I just want to see the result or 'printf/puts' in the ST2's console like I do under Windows.
With minGW for example I use this sublime-build file:
{
"cmd": ["mingw32-g++", "$file", "-Wall", "-o", "$file_base_name", "&&", "$file_base_name"],
"file_regex": "^[ ]File \"(...?)\", line ([0-9]*)",
"working_dir": "${project_path:${folder}}",
"selector": "source.c",
"shell": true
}

And with g++/gcc under Unix-like OS we type in the console "g++ -Wall test.c -o test -I/usr/local/include && ./test" to build and run. But with "&&" it's not compiling, g++ gives an error "&&:No such file or dir".
I can't use "shell": true option as well, it gets worse.
Do you have any idea how can we make it work?
Is it possible to put a second command in this 'sublime-build' file to run the executable?
Thanks PhilCK!

I've made it Phil!
To build and run with ST2 under Linux:

{
"cmd": ["g++ -Wall ${file} -o ${file_base_name} && ./${file_base_name}"],
"working_dir": "${file_path}",
"shell": true
}

Thanks for your quick responds!
Nice coding!

Cool, thanks for that.
I've updated the Gist to include it. The console out makes a lot of sense.

thanks. by changing the compiler to gcc this should work for c code as well?

Hi Adrian! It should be.

it's should working on Linux distro with GTK+ 3

{
    "cmd": ["gcc -o ${file_base_name} ${file} `pkg-config --libs --cflags gtk+-3.0` && ./${file_base_name}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "shell":true
}

Because Sublime Console does not seem to support cin commands, i run my compiled files in an external console.
I'm new to Linux, Sublime and C++, so i don't know if this is a good solution, but it works fine for me (Kubuntu 12.04):

{
    "cmd": ["g++ ${file} -o ${file_base_name}"], 
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c++",
    "shell": true,
    "variants":
    [
        {
            "name": "Run",
            "cmd": ["konsole --hold --nofork -e ${file_path}/./${file_base_name}"],
            "shell": true
        }
    ]
}  

The --hold option is used to enforce the terminal stays open after the programm finished and --nofork causes the terminal window to run in the front, so you don't have to switch between windows manually.

Hi, I run my file *.cpp but when I use scanf(), I can't enter the number.
Can you help me?

I created an additional Cpp.sublime-build, put in your code, and relaunched sublime text. The build and run works like a charm.

Thank you!

Hello, here is what worked for me on MinGW.

{
    "cmd": ["g++", "$file", "-o", "$file_base_name"],
    "selector": "source.c++",
    "working_dir": "$file_path",

    "variants":
    [
        {
            "name": "Run",
            "cmd": ["g++", "$file", "-o", "$file_base_name", "&&", "$file_path/$file_base_name"],
            "shell": true
        }
    ]
}

Also another alternative is if you want to do Ctrl-B and Ctrl-Shift-B (twice the effort) you can do it like this:

{
    "cmd": ["g++", "$file", "-o", "$file_base_name"],
    "selector": "source.c++",
    "working_dir": "$file_path",

    "variants":
    [
        {
            "name": "Run",
            "cmd": ["$file_path/$file_base_name"]
        }
    ]
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.