a build artifact and a clean build
Every step of a build leaves behind files that did not exist before: object files, the final executable, generated headers, log files. A build artifact is any such file produced by the build, as opposed to the source files you actually wrote by hand. A clean build is starting over by first deleting all of those artifacts, so the next build is rebuilt entirely from source with nothing left over from before.
The distinction is between inputs and outputs. Your source code, Makefiles, and configuration are inputs — you write and keep them, usually under version control. Artifacts are outputs — main.o, app, the contents of a build/ directory — derived from the inputs by running the build, and safe to throw away because the build can regenerate them. A clean build does exactly that throwing-away: a command like make clean removes the artifacts, or with an out-of-source layout you simply delete the entire build directory; then the next build has no stale leftovers to confuse it. This is why people say 'try a clean build' when something behaves inexplicably — it removes the possibility that an out-of-date artifact is being silently reused.
Why it matters: keeping artifacts separate from source keeps your project clean, keeps generated files out of version control, and makes the build reproducible. And the clean build is the standard cure for the whole class of bugs where the incremental, timestamp-based logic gets confused — a stale object file, a half-finished previous build, a renamed file whose old artifact lingers. It is slower (everything recompiles), but it removes all doubt that what you are running was truly built fresh from the current source.
Artifacts vs source: source: main.c util.c Makefile (you wrote these) artifacts: main.o util.o app (the build made these) A clean build: $ make clean # delete the artifacts $ make # rebuild everything from source
Artifacts are derived from source and can be deleted; a clean build removes them and rebuilds fresh.
A clean build is the standard fix for builds that misbehave due to stale artifacts, but it does not fix bugs in your actual code — it only rules out the build itself being out of date. Artifacts also generally should not be committed to version control.