That would be acceptable, undefining all the non-used code would be no problem. I would prefer some automated way though - really no way to e.g. read out if a certain system variable like from FBX is set in the preprocessor, and then #define MYSDK_ENABLE_FBX? Also, am I not going to also get problems with missing .lib-files etc?
There is a way, but it requires some work on your part.
I've done something similar, which is extendable enough to work for what you want.
VS has an option where you can set up a prebuild event. In the prebuild event, call a script file (i use Lua).
In that script file, query the environment variables if a certain variable exists, and if so, generate a file (for instance, when you install the directx sdk, it generates the env. var DXSDK_DIR or some such).
If no env. variables can be queried, then you can manually search the hard drive within the script and find if the installation exists. Whether or not searching a users hard drive is nice/morally ok, i don't know. You decide.
The general idea is that you can generate a header file that you include, and if you find what you want, generate a #define statement with your MACRO of choice that indicates that something exists.