3

This is basically a follow up question to: Using Visual Studio project properties effectively for multiple projects and configurations

Our library's target name is currently in this format:

$(ProjectName)-$(PlatformToolset)-$(PlatformShortName)-$(Configuration)

We'd like to add information about the runtime library used by the project to the target name, I tried adding $(RuntimeLibrary), but that doesn't seem to be set. Is there any other way to get the runtime library at the time the target name is resolved?

Thanks, John.

Community
  • 1
  • 1
Jonathan Winks
  • 1,091
  • 2
  • 9
  • 12

1 Answers1

0

With this property sheet you can do this. Import it in your property sheet and you will be able to access the RuntimeLibrary this way: $(RuntimeLibrary)

Yes!!! This will work in your propertie sheet =^.~=

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <_IsDebug>$([System.Convert]::ToString($([System.Text.RegularExpressions.Regex]::IsMatch($(Configuration),'[Dd]ebug'))))</_IsDebug>

        <_ItemDefinitionGroupRegex><![CDATA[<ItemDefinitionGroup Condition=".*']]>$(Configuration)\|$(Platform)<![CDATA['">((?:.*\n)*?.*)</ItemDefinitionGroup>]]></_ItemDefinitionGroupRegex>
        <_RuntimeLibraryRegex><![CDATA[(?:.*\n)*?.*<RuntimeLibrary>(.*)</RuntimeLibrary>(?:.*\n)*?.*]]></_RuntimeLibraryRegex>

        <_HasRuntimeLibrary>$([System.Text.RegularExpressions.Regex]::IsMatch($([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(ProjectPath))), $(_ItemDefinitionGroupRegex)).Result('$1')), $(_RuntimeLibraryRegex)))</_HasRuntimeLibrary>

        <!-- 
            Fix incremental build (Different results when running msbuild within Visual Studio or from console).
            http://connect.microsoft.com/VisualStudio/feedback/details/677499/different-results-when-running-msbuild-within-visual-studio-or-from-console 
        -->
        <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
    </PropertyGroup>

    <Choose>
        <When Condition="$([System.Convert]::ToBoolean($(_HasRuntimeLibrary)))">
            <!-- Extract runtime library from project file. -->
            <PropertyGroup Label="UserMacros">
                <_RuntimeLibrary>$([System.Text.RegularExpressions.Regex]::Match($([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(ProjectPath))), $(_ItemDefinitionGroupRegex)).Result('$1')), $(_RuntimeLibraryRegex)).Result('$1'))</_RuntimeLibrary>
            </PropertyGroup>
        </When>
        <Otherwise>
            <!-- Set default runtime library -->
            <PropertyGroup Label="UserMacros">
                <_RuntimeLibrary Condition=" '$(_IsDebug)' == 'True' ">MultiThreadedDebugDLL</_RuntimeLibrary>
                <_RuntimeLibrary Condition=" '$(_IsDebug)' == 'False' ">MultiThreadedDLL</_RuntimeLibrary>
            </PropertyGroup>
        </Otherwise>
    </Choose>

    <PropertyGroup Label="UserMacros">
        <IsDebug>$(_IsDebug)</IsDebug>

        <ConfigType Condition=" '$(IsDebug)' == 'True' ">Debug</ConfigType>
        <ConfigType Condition=" '$(IsDebug)' == 'False' ">Release</ConfigType>

        <Architecture Condition=" '$(Platform)' == 'Win32' ">x86</Architecture>
        <Architecture Condition=" '$(Platform)' == 'x64' ">x64</Architecture>

        <Toolset Condition=" '$(PlatformToolset)' == 'v110' ">msvc.110</Toolset>

        <RuntimeLibrary>$(_RuntimeLibrary)</RuntimeLibrary>
    </PropertyGroup>

    <ItemGroup>
        <BuildMacro Include="IsDebug">
            <Value>$(IsDebug)</Value>
        </BuildMacro>
        <BuildMacro Include="Toolset">
            <Value>$(Toolset)</Value>
        </BuildMacro>
        <BuildMacro Include="Architecture">
            <Value>$(Architecture)</Value>
        </BuildMacro>
        <BuildMacro Include="RuntimeLibrary">
            <Value>$(RuntimeLibrary)</Value>
        </BuildMacro>
        <BuildMacro Include="ConfigType">
            <Value>$(ConfigType)</Value>
        </BuildMacro>
    </ItemGroup>
</Project>