Not all software can be "relocatable". Before continuing you should think about how the program works, what files it accesses, what other programs access *it* (and expect it to be in a certain place), etc. If you determine that the location of the package doesn't matter, then it can probably be built as "relocatable".
All you need to do to build a relocatable package is put one or more:
in your spec file. The "<dir>" will usually be something like "/usr", "/usr/local", or "/opt". Every file in your files list must start with that prefix. For example, if you have "Prefix: /usr" and your files list contains "/etc/foo.conf", the build will fail. The fix for this is to put
Prefix: /usr Prefix: /etc
into the spec file so that the /usr and /etc directories may be relocated separately when this package is installed.
By default, RPM will install a relocatable package in the prefix directory listed in the spec file. You can override this on the RPM install command line with "--prefix <dir>". For example, if the package in question were going to be installed in "/opt" but you don't have enough disk space there (and it is a relocatable package), you could install it "--prefix /usr/opt".
If there is more then one Prefix you may relocate each prefix separately by using syntax like:
rpm ... --relocate /opt=/usr/opt --relocate /etc=/usr/etc ...
If any of the Prefixes is not being relocated they can be skipped on the command line