This is just a test c++ repo. Go ahead and break it.

README.md

testcode

This is just a test project. You can do anything here, test g++, make, cmake, git, cscope, and IDE projects.

Getting the project

You can get a copy of this project by clicking on the ZIP or TAR buttons near the top right of the GitList web page.

You can clone from the origin with:

git clone ssh://USERNAME@dlma.com/~/git/testcode.git

IDEs

tmux vim entr

Create two panes in tmux, run vim in one, and run entr in the other. You probably only need the git ls-files for entr, but I provide a bash command group with find here so I can easily copy and change it as needed.

{ git ls-files && find . -type f -regex '.*\.\(cfg\|local\)'; } | \
entr -c sh -c 'ctags -R *; make -j$(nproc) && \
valgrind -q --leak-check=yes --show-leak-kinds=all product/testcode'

find could also have been find . -type f \( -name \*.cfg -or -name \*.local \).

To compile with debug info and run in gdb:

... | entr -c sh -c 'ctags -R *; make debug -j$(nproc) && gdb product/testcode'

Tip: In vim you can grep and use the QuickFix window with commands like...

:grep -rI --exclude=tags --exclude=cscope.* --exclude-dir=obj searchterm .
:cw

See this QuickFix tip for sorting results by filename.

entr One-Liner for When no Makefile

This entr command is handy when composing interview questions without a Makefile:

ls -1 *.h *.cpp | entr sh -c 'g++ -Wall -std=c++17 -pthread *.cpp && \
valgrind -q --leak-check=yes --show-leak-kinds=all ./a.out'

Visual Studio Code and WSL2

Once you've got the Remote -WSL extension for WSL, you can invoke Code from the WSL side.

code .

Or, if it's not in your path, something like...

/mnt/c/Users/$USER/AppData/Local/Programs/Microsoft\ VS\ Code/bin/code .

Other IDEs

Look for the presence of their project files. They should work normally.

Formatting

Use clang-format. Install the distro's version with:

sudo apt install clang-format

Or install a newer one with:

pipx install clang-format

And move $HOME/.local/bin ahead of /usr/bin in your $PATH.

Then, after making your edits, use the vim integration or manually format in one of a couple of ways:

Use git-clang-format

git-clang-format is installed with clang-format and will format staged files into the unstaged area.

  1. Stage the files you want to format.
  2. Run git-clang-format --style=file, and it'll leave unstaged formatting changes.
  3. Review with git difftool and accept the desired changes or unstage.

Manually clang-format

git status --porcelain | \
awk 'match($1, "M|A") && match($2, "(c|h)(pp)?$"){print $2}' | \
xargs clang-format -style=file -i

Or, shorter but less comprehensive:

git ls-files -m | egrep ".(c|h)(pp)?$" | xargs clang-format -style=file -i

Current Features

  • Multiple directories for testing build systems and IDEs
  • "make" essentially works.

Is it any good?

Yes.

To Do

  • Compare make vs. cmake vs. autotools
  • Experiment with ctags generation