Show Lecture.HowICompile as a slide show.
CS253 How I Compile
How I Compile C++ Programs
I don’t use an IDE, like Eclipse. I work from the command line. I use
vim to edit, and g++ to compile. You may edit and compile your
programs however you like—I just expect you to turn in a .cc
file.
How you produce it is your affair.
Flags
g++ -std=c++17 -Wall -Wextra -Wpedantic -Werror -Wfatal-errors foo.cc
-std=c++17
: Compile strict C++ version 2017, no GNU extensions.
- Without this, the current (9.3.1) compiler defaults to C++14
with GNU extensions.
-Wall
: Produce all warnings.
-Wextra
: Produce more warnings.
-Wpedantic
: Produce ultra-fussy warnings.
-Werror
: Treat warnings as errors.
-Wfatal-errors
: Give up after the first error.
Too Hard
“But that’s too hard to type every time!” 🎻
You don’t have to type it every time. Type it once, and use shell
history (!g
) to do it again. Or, you could write a two-line bash
script. I use Makefiles.
“But I’ll never remember all that!”
You want to be a professional computer programmer, and you’re still
relying on meat-based memory? Write it down. Get Dropbox,
Evernote, Google Drive, or some kind of permanent storage. Use a
notebook and a pen if you’re old-school. You’re going accumulate data
for the rest of your life. Start doing it right.
More Flags
However, when I get really serious, as in a Makefile
or
CMakeLists.txt
:
g++ -g -std=c++17 -O3 -Wall -Wextra -Wpedantic -Werror
-fmessage-length=80 -fno-diagnostics-show-option
-fstack-protector-all -Walloc-zero -Walloca -Wctor-dtor-privacy
-Wduplicated-cond -Wduplicated-branches -Werror -Wextra-semi
-Wfatal-errors -Winit-self -Wlogical-op -Wold-style-cast
-Wshadow -Wunused-const-variable=1
-Wzero-as-null-pointer-constant
Too Too Hard
“But that’s ridiculous! I shouldn’t have to type all that.”
Yeah, you shouldn’t—it’s terribly unfair. If life were fair, then the
compiler would do all that by default, and ice cream would be good for
you. Get over it. I don’t type it all every time—I copy it.
Also, I compile an important program with more than one compiler.
Different compilers generate different warnings.
clang++
works well on Linux.
Do you want fries with that?
“More warnings? Why on earth would I want more warnings!?”
I wish you the best of luck with your career in the fast-food industry.