I wonder if, in this case, it wouldn't be possible to pass a -D_WIN32_WINNT=0x0500 to the compiler CCFLAGS?
Yes - that works for this case. (I didn't think of doing that.) There are, I think, (hypothetical) situations where that approach would be found wanting - eg if the define depended upon what else is defined (#ifdef/#else/#endif), or if you need to include a header.
I can't find a ready source for that information amongst the MSC pre-defines
I can't either - it may not exist. The only way I know of is GetOSVersion().