Solution-wide #define
I don't think there is a way to create a solution-wide #define. You can create one for each project/assembly, as the other answers have described, but you'll need to do this for each and every project in the solution if you need all source code files to know of that #define.
Years later, and similar to Alexei's answer but supported innately
One can make a Directory.Build.props
similar to a NuGet.Config
file as per
https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019
Ours looks like:
<Project>
<PropertyGroup>
<DefineConstants>RC_427</DefineConstants>
</PropertyGroup>
</Project>
And it effectively includes this into all CSPROJ files in your SLN. For some reason that particular solution is insanely hard to find via google. Been around since MSBuild 15
Update: You cannot do a "solution-wide" define afaik, however the answer below is workable on a per-project basis.
You set them in your Compilation Properties or Build options:
http://msdn.microsoft.com/en-US/library/76zdzba1(v=VS.80).aspx (VS2008) http://msdn.microsoft.com/en-US/library/76zdzba1(v=VS.100).aspx (VS2010)
see the "To set a custom constant" heading.
Update
Microsoft Documentation on Build Options
You get to the build options by right-clicking the project and selecting properties from the menu.
I know solution for C# projects (I don't tested it for any other projects)
For example you have:
Project1\
Project2\
Solution1\Solution1.sln
Solution2\Solution2.sln
Create SolutionDefines.targets
file in solution directory
Project1\
Project2\
Solution1\Solution1.sln
Solution1\SolutionDefines.targets
Solution2\Solution2.sln
Solution2\SolutionDefines.targets
Solution3\Solution2.sln
Solution3\|no target file|
in each project file add:
<Import Project="$(SolutionDir)SolutionDefines.targets" Condition="exists('$(SolutionDir)SolutionDefines.targets')" />
In Solution1\SolutionDefines.targets
add:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);TRACING_BUILD</DefineConstants>
</PropertyGroup>
</Project>
In Solution2\SolutionDefines.targets
add:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ANOTHER_DEFINE</DefineConstants>
</PropertyGroup>
</Project>
In this case you have:
For Solution1 - all projects have TRACING_BUILD
define added
For Solution2 - all projects have ANOTHER_DEFINE
define added
For Solution3 - all projects - no defines added
In this approach you must store all solutions with solution wide defines in separate directories