How to Build C++ Projects with STDIN in Sublime Text 3
2017-10-10
I’ve been a die-hard fan of Sublime Text (ST), all the time from the 2nd to the 3rd version now. To be frank, I use ST in almost all situations: taking lecture notes in LaTeX, drafting small projects in Python or R (while for large projects, Jupyter Notebook and RStudio are stronger platforms), or tracking my Todo-list in Markdown. Everything works so smoothly and lightly with ST, especially compared with IDEs like Xcode or Visual Studio. On the other hand, it is more friendly to users who are not so keen on shortcuts – I mean, shortcuts for everything, like Vim or Eclipse (there are abundant shortcuts in ST already and that’s enough for me). It must be a different world if I mastered that technique, but for now… I think I’m fine with a large and smart touchpad on my MBP1.
However, there’s one thing missing in ST3, and that is C++ project building. To be specific, there’re two features that are not implemented yet:
- The only build system for C++, is called
C++ Single File, and you know what that means. The only scenario that works is when you just have one file suffixed bycpp. Nohppor othercpps, no. - You cannot input through
STDINbecause the editor freezes whencinis met. No input, no.
These two missing features are really annoying at first when I need to write a project in C++ and do some debugging. However, eventually I managed to write my own build system for C++ which accepts multiple files (including head files) and even inputs. I’ll just skip the steps to create a new build system as they can be easily handled if you check the menu. The codes for the system is as below:
{
"shell_cmd": "g++ *.cpp -I /opt/local/include -o a && open -a Terminal.app ./a",
"selector": "source.c++, source.cxx, source.cpp",
"working_dir" : "$file_path"
}
The basic idea is to build2, create a executive program named a3 and then run it in the Terminal, where STDIN is possible.
I hope this post can help anyone who need this trick.
-
There’s actually one more text editor (not IDE) I’ve tried:
Atom. It’s developed and maintained by GitHub and looks really fancy at very first glance. However, at least on my MBP, it’s not as fast asST3and was later knocked out. ↩︎ -
Note here I included a parameter
-I /opt/local/includein case external libraries likeboostare required in the code. ↩︎ -
Instead of the base-name of the file, I name this executive program as a simple
abecause when there’re multiplecppfiles in the project, it’s hard for the computer to locate which one contains the main code and determine a name after that file. In many cases, thecppfile that is active when you hitcommand+Bonly declares some classes, but the executive program is named after it. That’s the actual case I encountered and want to eliminate. ↩︎
