Rpmmacros variables affecting rpmbuild portability
Defining things like %_topdir and %_smp_mflags for all your rpmbuilds can be done in the hidden rpmmacros file in your build user’s home directory.
The problem is portability.
If you define unnecessary things such as %_tmppath, and then try to use it in your spec files, everything will work fine until the day you or someone else attempts to build without having their rpmmacros set up quite the same way.
If you use %_tmppath in a spec file, but you don’t define it in your rpmmacros or build from a nonstandard location, such as your home directory, you will probably run into the problem where your source tarball gets unpacked in a location other than where the variable points to and the build fails.
Keep It Simple Stupid.
Do you ever really need the smp_mflags? Probably not, but %_topdir and %_smp_mflags (for very large builds) should be more than enough for most circumstances. Defaults are nice.
But with that said, sometimes you do want to define the extras. Take NFS mounted directories for example.
If vars like %_topdir, $RPM_BUILD_DIR, and $RPM_BUILD_ROOT end up pointing to NFS mounts, now would be a good time to redirect them in your .rpmmacro file to more accessible storage. Just make sure you keep them in sync with your spec files.