This is called a true "Configuration Management" issue (as oppose to simple "Source Code Management" which include RCS and VCS)
Most of the time "configuration" is the recording of your code and its dependency with third-party library, but to really respect the reproducibility principle behind SCM, the tools necessary to rebuild a product ought to be versioned as well.
That means you are not working with just one "component" (your source repository), but with several components, each at certain labels which define your configuration:
- the IDE (for example you could version a full Eclipse directory)
- the language (you can version a JDK directory)
- the source code and project information (since you can add some IDE-specific files with your code)
Then, depending your VCS tool:
- you define your workspace with specific versions of each component (ClearCase UCM, SVN external, Git submodules, ...)
- you work only in one of those component (your source code), the other ones being read-only
The specifics depend on the language, tool and code you are using, and you may need to combine that approach with branches per platform to isolate the (hopefully small) part which is platform-specific.