Let's move to describe each other target inside debian/rules file starting to understand what is, and why every rule is needed for a correct package build:
build takes care to perform all the configuration and compilation of the package. Usually this target is anticipated by configure/config one, that allows to configure source files before building them. Usually quite all applications contains their own configure script, that will be launched in config.status target under commands sections anticipated by a comment line:
Add here commands to configure the package.
Strictly related to build target are build-arch and build-indep, both of them are optional and can be dropped if not needed.
Build-arch
It takes care of configurating and compiling required for creating architecture-dependant binary packages, if the Architecture section is debian/control is not set to all.
Build-indep
Similarly to build-arch perform the configuration/compilation required for creating architecture-independent binary packages, if the Architecture section in debian/control is set to all.
Binary target
Takes care (must be invoked as root) of everything related to creating the binary package produced from source files. Usually it's a target with no commands to be specified, it's simply based on binary-arch and binary-indep dependencies, listed here:
Binary arch
Builds the binary packages which are specific to a particular architecture. Depends on build and install targets.
Binary-indep
Builds the binary packages which are -not- specific to a particular architecture. Depends on build and install targets. Both the Binary-arch and Binary-indep must exist, they *cannot* be dropped, also if one of them has nothing to do with the package, a developer is currectly working on.