Я знаю решение для проектов C # (я не тестировал его для других проектов)
Например, у вас есть:
Project1\
Project2\
Solution1\Solution1.sln
Solution2\Solution2.sln
Создать SolutionDefines.targets
файл в каталоге решений
Project1\
Project2\
Solution1\Solution1.sln
Solution1\SolutionDefines.targets
Solution2\Solution2.sln
Solution2\SolutionDefines.targets
Solution3\Solution2.sln
Solution3\|no target file|
в каждом файле проекта добавить:
<Import Project="$(SolutionDir)SolutionDefines.targets" Condition="exists('$(SolutionDir)SolutionDefines.targets')" />
В Solution1\SolutionDefines.targets
добавить:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);TRACING_BUILD</DefineConstants>
</PropertyGroup>
</Project>
В Solution2\SolutionDefines.targets
добавить:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ANOTHER_DEFINE</DefineConstants>
</PropertyGroup>
</Project>
В этом случае у вас есть:
Для Solution1 - во всех проектах TRACING_BUILD
определить добавлено
Для Solution2 - во всех проектах ANOTHER_DEFINE
определить добавлено
ДляSolution3 - все проекты - без определений добавлено
При таком подходе вы должны хранить все решения с широкими определениями решений в отдельных каталогах