i hate dlls too but sometimes we delivers programs in dll form to customer it is important to be able to have an executable to test it.
You don't have to imagine a complicated build process with workspaces, main packages and supermain.... In my opinion, the only case to treat is this one. An exutable which use a dll (with DLL in main config for example). This flag must be use to build all packages required by the dll (to enable fPIC for GCC) and to use correct linker settings.