Thanks again for the replies, and sorry about the delay in getting back to you.
We've updated to 0.9.31 and FPC 2.4.3, but still no fix. We know its not a problem with the compiler, as defining them identically on OS X works fine.
I looked at the bug report, Marco, but it didn't seem specifically relevant. We do know that defining '-dTarget_Windows:=TRUE' works on OS X (XCode), but not on Lazarus for Windows.
If this is a bug in Lazarus, what's the best way of submitting it?
Alternatively, we saw that there is an area for Build Macros and Conditionals for them. Would there be some way for us to use this? It doesn't matter how we define it as long as the end result is that {$IFC Target_Other} would return false and be skipped, but {$IFC Target_Windows} would return true and be run.