Tell me a book ( or resources) for creating a good terminal based workflow (for building, debugging) for c++ based project development About me: I started development in python. I consider my self as an intermediate Vim user. I am comfortable with many bash shell commands. For all the python projects (like django or numerical optimization related), I simply open multiple terminals in i3 and then edit different files using vim and get things done.

Here is a fact about me, I have never done project development in C++ ( long back I did write some single source code file in C, but that is all). I would like to develop some expertize in doing C++ based project development using command line interface (no IDE for sure). I know that there will be an addition compiling and linking overhead (this is where python is so good).

I need to learn some tools which will allow me which help me to create good workflow ( or say environment ) to do development of C++ based projects using cli (command line interface). I suspect that the 3 tools which are must for me to create such cli (terminal) based workflow are :


a compiler ( gcc)
gdb for debugging via command line
make ( for build automation)


Can anyone refer me to a book ( or any other resource like online courses, videos, blogs ) which would help me to learn those tools for building a terminal based workflow and would teach me some C++ language itself ?

Note1: Most of the C++ books I found online would simply teach C++ development using some IDE, I have not found a single book which teaches C++ development using make and gdb (or any other command line tools).
Do it in two steps: There are resources for each part.


Start by learning how to compile, link, run code, and launch the debugger, from the command line.
Then learn how to write make files.


You should also read Recursive Make Considered Harmful by Peter Miller. It should direct you away from a lot of common bad practice. When I applied what I learnt from it, to re-right a make file, with the intention to make it simpler, so that it would be easier to add to. It also became twice as fast (but that is not the reason to read this).