It depends on what operating system you are targetting. Providing a source code archive that supports "./configure" followed by "make" followed by "sudo make install" is pretty typical. However, if you want to distribute your package, then the following are some alternative ways to distribute your package:
- Ubuntu: provide an apt-get repository for your program so it can be installed via "sudo apt-get install".
- Mac OS X: create and submit a "port" to MacPorts so that it can be installed via "sudo port install".
- RedHat/Fedora: provide a package that can be downloaded and installed with "yum".
Many other UNIX variants have other package managers for which providing an appropriate package is ideal. If you are distributing a binary to Mac OS X users, it is also nice to provide a self-contained DMG disk image containing the fully built application or library framework or a *.mpkg or *.pkg installer.
For Debian-based OSs, providing a *.deb package is a good alternative to an apt-get repository. For Redhat/Fedora, providing a *.rpm package is a good alternative to supporting an install via yum.
I should point out that you really only need to provide your package using the simple "./configure", "make", and "sudo make install" mechanism. The fans of the various package managers can provide a convenient package of your source code... that is not necessarily your responsibility... although you can certainly encourage the process to happen sooner on your own.
EDIT
I see that you've asked how to achieve the "./configure", "make", and "sudo make install" behavior. This has traditionally been achieved using the GNU Autotools. However, I strongly recommend that you avoid them as they are quite messy and tricky to use. Instead, I would recommend you use CMake. I already have two project templates in C++ that use CMake and which provide the "./configure", "make", and "sudo make install" behavior. Those templates are: C++ Project Template and C++ Library Project Template. Alternatively, if you already have a Makefile, you can add a target named "install" that does the appropriate installation; however, doing that in a portable and manner is quite tricky. Using CMake+CPack (as I've done) is simpler.