Notes on C++ development with Emacs on Ubuntu Linux
Here are my notes on setting up an Emacs C++ development environment. I'm using GNU g++ (4.3.3), GNU make (3.81), GNU gdb (3.8-debian), and GNU emacs (23.0.92.1 built from CVS 2009-04-22) on Ubuntu Linux (9.04 Jaunty Jackalope).
Install tools
If you don't already have g++
, make
, and gdb
, install them:
sudo apt-get install g++ make gdb
Create files
- Create a project directory:
mkdir helloworld
- Create a source file
helloworld/hello.cpp
:#include <iostream> int main(void) { char greeting[] = "Hello World!"; std::cout << greeting << std::endl; return 0; }
- Create a makefile
helloworld/Makefile
:# Makefile for GNU g++ CC=g++ CFLAGS=-g -Wall all: hello hello: hello.cpp $(CC) $(CFLAGS) -o hello hello.cpp clean: rm hello
Compile within Emacs
See also: 32 Compiling and Testing Programs in the GNU Emacs manual.
- Open
hello.cpp
in Emacs M-x compile RET
make -k RET
Note: The default compile command is
make -k
. You can change the default command by setting thecompile-command
variable in your.emacs
file.- Useful commands in the compilation window:
C-x `
: Go to next error in the codeM-n
: Go to next error messageM-p
: Go to previous error messageRET
: Go to the source code for the current error message
Run using Emacs shell
M-! ./hello RET
You should see the output in the minibuffer.
Debug with gdb in Emacs
For more information see: 32.6 Running Debuggers Under Emacs in the GNU Emacs manual.
- To show multiple debugging windows such as breakpoints, locals, etc., set the
gdb-many-windows
variable in~/.emacs
:(setq gdb-many-windows t)
Restart Emacs. - Start the debugger. While visiting
helloworld/hello.cpp
:M-x gdb RET --annotate=3 hello RET
- Set a breakpoint by clicking in the left margin at the desired location.
- Run the debugger by typing
run
at the(gdb)
prompt in the*gud-hello*
buffer. - In the GUD buffer, use the following commands:
C-c C-s
Step intoC-c C-n
Stev overC-c C-p
Evaluate the expression at point.C-c C-r
ContinueC-c C-u
Continue until current line
- When finished, type
quit
at the(gdb)
prompt.
Documentation:
References
- Practical C++ Programming, 2nd Edition by Steve Oualine (2004)
- Learning GNU Emacs, 3rd Edition by Debra Cameron et al. (2004)
- Emacs: the Free Software IDE at the Linux Journal (2002)
Related posts
- Magit in Spacemacs (evil-magit) notes — posted 2018-11-02
- Switching from Emacs to Vim (actually Spacemacs) — posted 2015-12-31
- Colorized, interactive "git blame" in Emacs: vc-annotate — posted 2011-05-28
- My Emacs Python environment — posted 2010-05-10
- Emacs espresso-mode for jQuery — posted 2010-03-10
Comments
Cedet and article about it - for more comfortable work with code
ECB - emac code browser
Alex, Thanks for the links to Cedet and ECB. I had heard of ECB, but didn't look into it very thoroughly. It looks like it could be very useful. The code completion in Cedet looks especially interesting. Though Emacs' dabbrev-expand is quick and useful, sometimes I need something more robust. Maybe Cedet's code completion is what I need! I will check it out.
why do you set c-basic-offset with 3? It is very awful.