1 | @ECHO OFF |
---|
2 | |
---|
3 | SET CLEANBEFOREBUILD= |
---|
4 | |
---|
5 | SET SELECTED= |
---|
6 | SET CONFIGURATION= |
---|
7 | SET PLATFORM= |
---|
8 | |
---|
9 | IF "%~1"=="" GOTO :prompt_solution |
---|
10 | |
---|
11 | SET SELECTED=%1 |
---|
12 | IF NOT EXIST %SELECTED% ( |
---|
13 | ECHO Solution file %SELECTED% could not be found. |
---|
14 | GOTO :end |
---|
15 | ) |
---|
16 | ECHO Building solution %SELECTED% ... |
---|
17 | GOTO :config_selection |
---|
18 | |
---|
19 | :prompt_solution |
---|
20 | SET /A COUNT=0 |
---|
21 | FOR /F "tokens=*" %%A IN ('dir /B *.sln') DO ( |
---|
22 | CALL :forloopbody "%%A" |
---|
23 | ) |
---|
24 | |
---|
25 | IF "%COUNT%"=="1" ( |
---|
26 | SET SELECTED=%SOLUTIONS.1% |
---|
27 | ECHO Building %SOLUTIONS.1% as it is the only solution that was found ... |
---|
28 | GOTO :config_selection |
---|
29 | ) |
---|
30 | |
---|
31 | ECHO Found the following solutions: |
---|
32 | FOR /F "tokens=2* delims=.=" %%A IN ('SET SOLUTIONS.') DO ECHO %%A = %%B |
---|
33 | ECHO. |
---|
34 | SET /P SOLUTIONINDEX=Which solution to build? Type the number: |
---|
35 | |
---|
36 | SET SELECTED="" |
---|
37 | FOR /F "tokens=2* delims=.=" %%A IN ('SET SOLUTIONS.') DO ( |
---|
38 | IF "%%A"=="%SOLUTIONINDEX%" SET SELECTED=%%B |
---|
39 | ) |
---|
40 | |
---|
41 | IF %SELECTED%=="" GOTO :eof |
---|
42 | |
---|
43 | :config_selection |
---|
44 | IF "%~2"=="" GOTO :prompt_config |
---|
45 | |
---|
46 | SET CONFIGURATION=%~2 |
---|
47 | ECHO Building configuration %CONFIGURATION% ... |
---|
48 | GOTO :platform_selection |
---|
49 | |
---|
50 | :prompt_config |
---|
51 | SET /P CONFIGURATION=Which configuration to build [Release]: |
---|
52 | IF "%CONFIGURATION%"=="" SET CONFIGURATION=Release |
---|
53 | |
---|
54 | :platform_selection |
---|
55 | IF "%~3"=="" GOTO :prompt_platform |
---|
56 | |
---|
57 | SET PLATFORM=%~3 |
---|
58 | ECHO Building platform %PLATFORM% ... |
---|
59 | GOTO :clean |
---|
60 | |
---|
61 | :prompt_platform |
---|
62 | SET /P PLATFORM=Which platform to build [Any CPU]: |
---|
63 | IF "%PLATFORM%"=="" SET PLATFORM=Any CPU |
---|
64 | |
---|
65 | :clean |
---|
66 | IF "%~4"=="" GOTO :prompt_clean |
---|
67 | |
---|
68 | SET CLEANBEFOREBUILD=%~4 |
---|
69 | GOTO :main |
---|
70 | |
---|
71 | :prompt_clean |
---|
72 | SET /P CLEANBEFOREBUILD=Would you like to clean before building [n]: |
---|
73 | IF "%CLEANBEFOREBUILD%"=="" SET CLEANBEFOREBUILD=n |
---|
74 | |
---|
75 | :main |
---|
76 | REM First find the path to the msbuild.exe by performing a registry query |
---|
77 | FOR /F "tokens=1,3 delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0"') DO ( |
---|
78 | IF "%%A"=="MSBuildToolsPath" SET MSBUILDPATH=%%B) |
---|
79 | |
---|
80 | REM Then execute msbuild to clean and build the solution |
---|
81 | REM Disable that msbuild creates a cache file of the solution |
---|
82 | SET MSBuildUseNoSolutionCache=1 |
---|
83 | REM Run msbuild to clean and then build |
---|
84 | IF "%CLEANBEFOREBUILD%" NEQ "n" ( |
---|
85 | ECHO Cleaning ... |
---|
86 | %MSBUILDPATH%msbuild.exe %SELECTED% /target:Clean /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly |
---|
87 | ) |
---|
88 | ECHO Building ... |
---|
89 | %MSBUILDPATH%msbuild.exe %SELECTED% /target:Build /p:Configuration="%CONFIGURATION%",Platform="%PLATFORM%" /m:2 /nologo /verbosity:q /clp:ErrorsOnly |
---|
90 | |
---|
91 | ECHO. |
---|
92 | ECHO DONE. |
---|
93 | |
---|
94 | :end |
---|
95 | |
---|
96 | PAUSE |
---|
97 | |
---|
98 | GOTO :eof |
---|
99 | |
---|
100 | REM This workaround is necessary so that COUNT gets reevaluated |
---|
101 | :forloopbody |
---|
102 | SET /A COUNT+=1 |
---|
103 | SET SOLUTIONS.%COUNT%=%1 |
---|
104 | GOTO :eof |
---|