Created
December 31, 2013 04:11
-
-
Save mitchelldavis/8192512 to your computer and use it in GitHub Desktop.
MSBuild for MinGW
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> | |
<Target Name="SetupProject"> | |
<MakeDir Directories="$(MSBuildProjectDirectory)\obj;$(MSBuildProjectDirectory)\bin" /> | |
</Target> | |
<Target Name="CleanProject"> | |
<RemoveDir Directories="$(MSBuildProjectDirectory)\obj;$(MSBuildProjectDirectory)\bin" /> | |
</Target> | |
<Target Name="Validate"> | |
<Error Text="You must define the ProjectType property with a value of 'lib' or 'exe'" | |
Condition=" '$(ProjectType)' != 'lib' AND '$(ProjectType)' != 'exe' " /> | |
</Target> | |
<Target Name="CreateObjectItems"> | |
<CreateItem Include="$(MSBuildProjectDirectory)\obj\*.o"> | |
<Output TaskParameter="Include" ItemName="ObjectFiles" /> | |
</CreateItem> | |
</Target> | |
<Target Name="ResolveArtifactName" DependsOnTargets="Validate"> | |
<CreateProperty Value="$(MSBuildProjectDirectory)\bin\lib$(OutputName).a" | |
Condition=" '$(ProjectType)' == 'lib' "> | |
<Output TaskParameter="Value" PropertyName="OutputArtifactFileName" /> | |
</CreateProperty> | |
<CreateProperty Value="$(MSBuildProjectDirectory)\bin\$(OutputName).exe" | |
Condition=" '$(ProjectType)' == 'exe' "> | |
<Output TaskParameter="Value" PropertyName="OutputArtifactFileName" /> | |
</CreateProperty> | |
</Target> | |
<Target Name="CleanProjectDependencies"> | |
<MSBuild Projects="@(ProjectDependency)" Targets="Clean" /> | |
</Target> | |
<Target Name="BuildProjectDependencies"> | |
<MSBuild Projects="@(ProjectDependency)" /> | |
</Target> | |
<Target Name="Compile" DependsOnTargets="SetupProject" Inputs="@(Compile)" Outputs="obj\%(Compile.Filename).o"> | |
<Exec Command="g++ -c %(Compile.Identity) -o obj\%(Compile.Filename).o @(Include -> '-I%(Identity)', ' ')" /> | |
</Target> | |
<Target Name="CompileC" DependsOnTargets="SetupProject" Inputs="@(Compile)" Outputs="obj\%(Compile.Filename).o"> | |
<Exec Command="gcc -c %(Compile.Identity) -o obj\%(Compile.Filename).o @(Include -> '-I%(Identity)', ' ')" /> | |
</Target> | |
<Target Name="BuildLibrary" | |
Inputs="@(ObjectFiles)" | |
Outputs="$(OutputArtifactFileName)" | |
DependsOnTargets="ResolveArtifactName;Compile;CreateObjectItems" | |
Condition=" '$(ProjectType)' == 'lib' "> | |
<Exec Command="ar -rv "$(OutputArtifactFileName)" @(ObjectFiles -> '"%(Identity)"', ' ')" /> | |
</Target> | |
<Target Name="BuildLibraryC" | |
Inputs="@(ObjectFiles)" | |
Outputs="$(OutputArtifactFileName)" | |
DependsOnTargets="ResolveArtifactName;CompileC;CreateObjectItems" | |
Condition=" '$(ProjectType)' == 'lib' "> | |
<Exec Command="ar -rv "$(OutputArtifactFileName)" @(ObjectFiles -> '"%(Identity)"', ' ')" /> | |
</Target> | |
<Target Name="BuildExe" | |
Inputs="@(ObjectFiles)" | |
Outputs="$(OutputArtifactFileName)" | |
DependsOnTargets="ResolveArtifactName;Compile;CreateObjectItems" | |
Condition=" '$(ProjectType)' == 'exe' "> | |
<Exec Command="g++ -o "$(OutputArtifactFileName)" @(ObjectFiles -> '"%(Identity)"', ' ') @(LibrarySearchDirectory -> '-L%(FullPath)', ' ') @(Library -> '-l%(Identity)', ' ')" /> | |
</Target> | |
<Target Name="BuildExeC" | |
Inputs="@(ObjectFiles)" | |
Outputs="$(OutputArtifactFileName)" | |
DependsOnTargets="ResolveArtifactName;CompileC;CreateObjectItems" | |
Condition=" '$(ProjectType)' == 'exe' "> | |
<Exec Command="gcc -o "$(OutputArtifactFileName)" @(ObjectFiles -> '"%(Identity)"', ' ') @(LibrarySearchDirectory -> '-L%(FullPath)', ' ') @(Library -> '-l%(Identity)', ' ')" /> | |
</Target> | |
<Target Name="Build" DependsOnTargets="BuildProjectDependencies;BuildLibrary;BuildExe" /> | |
<Target Name="BuildC" DependsOnTargets="BuildProjectDependencies;BuildLibraryC;BuildExeC" /> | |
<Target Name="Clean" DependsOnTargets="CleanProjectDependencies;CleanProject"/> | |
<Target Name="Rebuild" DependsOnTargets="Clean;Build"/> | |
<Target Name="RebuildC" DependsOnTargets="Clean;BuildC"/> | |
</Project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment