Компиляция cpp-файлов
:: --------------------------------------------------------------------------- :: :: Перед использованием сценария рекомендуется задать системные переменные: :: :: sVSPath - путь к корневому каталогу Visual C++, :: :: sVSPathName - путь к основному исполнимому файлу Visual C++ :: :: (либо раскомментировать и отредактировать sVSPath, sVSPathName ниже в файле.:: :: --------------------------------------------------------------------------- :: echo off cls echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- :: -------------------------------------- :: :: Имена исходников (через пробел) :: :: -------------------------------------- :: set gavSrc=MySource1.cpp MySource2.cpp :: -------------------------------------- :: :: Дополнительно, если необходимо, для Qt :: :: - заголовочный файл,содержащий Q_OBJECT:: :: из него будет сгенерирован moc_xxx.cpp :: :: -------------------------------------- :: ::set gavSrcQtMoc=gavQtSignalSlot.h set gavSrcQtMoc="" :: -------------------------------------- :: :: Версия компилятора: :: :: 6 - VC6, :: :: 8 - VC8 (2005), :: :: 9 - VC9, :: :: 10 - VC10 (2010) :: :: 11 - VC11 (2012) :: :: -------------------------------------- :: set iCompVer=11 :: -------------------------------------- :: :: Режим компиляции: :: :: 0 - release, :: :: 1 - debug, :: :: 2 - генерирует прототипы функций :: :: (без компиляции) :: :: -------------------------------------- :: set iModeComp=1 :: -------------------------------------- :: :: Флаги наличия библиотеки: :: :: 0 - нет, 1 - есть :: :: -------------------------------------- :: set bLibQt=0 set bLibCrt=0 set bLibBoost=0 :: -------------------------------------- :: :: Режим линковки с Qt: :: :: 0 - shared (динамическая), :: :: 1 - static (статическая) :: :: -------------------------------------- :: set iModeQt=0 :: -------------------------------------- :: :: Флаги специальных WINDDK :: :: 0 - не используется :: :: 1 - WINDDK для Win2000, WinXP :: :: (в этом случае д.б. верно заданы:: :: gavIncPathDdkXP,gavLibPathDdkXP:: :: - см. ниже) :: :: -------------------------------------- :: set iWinddk=0 :: -------------------------------------- :: :: Дополнительные флаги компилятора :: :: ( дефайны задавать так: -Dдефайн ) :: :: -------------------------------------- :: ::set gavCompilFlags=-Dtest :: -------------------------------------- :: :: Подсистема приложения (одна из) :: :: -------------------------------------- :: :: Win32 character-mode application: set gavSubsystem=CONSOLE :: Application does not require a console: ::set gavSubsystem=WINDOWS :: Device drivers for Windows NT: ::set gavSubsystem=NATIVE :: Application that runs with the POSIX subsystem in Windows NT: ::set gavSubsystem=POSIX :: Application that runs on a Windows CE device: ::set gavSubsystem=WINDOWSCE :: -------------------------------------- :: :: Пути к Visual Studio. :: :: !!! без кавычек !!! :: :: -------------------------------------- :: :: VS6 (!! Путь к компилятору VS6 д.б. коротким и без пробелов - иначе ошибка линковки) if %iCompVer%==6 set sVSPath=C:\Progs\VC98 if %iCompVer%==6 set sVSPathName=%sVSPath%\bin\cl.exe :: VS8 if %iCompVer%==8 set sVSPath=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 8\VC if %iCompVer%==8 set sVSPathName=%sVSPath%\bin\cl.exe :: VS9 if %iCompVer%==9 set sVSPath=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 9.0\VC if %iCompVer%==9 set sVSPathName=%sVSPath%\bin\cl.exe :: VS10 if %iCompVer%==10 set sVSPath=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 10.0\VC if %iCompVer%==10 set sVSPathName=%sVSPath%\bin\cl.exe :: доп.пути для VS2010: if %iCompVer%==10 set gavIncPathMy=%SYSTEMDRIVE%\Program Files\Microsoft SDKs\Windows\v7.0A\Include if %iCompVer%==10 set gavLibPathMy=%SYSTEMDRIVE%\Program Files\Microsoft SDKs\Windows\v7.0A\Lib :: VS11 if %iCompVer%==11 set sVSPath=%SYSTEMDRIVE%\Program Files (x86)\Microsoft Visual Studio 11.0\VC if %iCompVer%==11 set sVSPathName=%sVSPath%\bin\cl.exe :: доп.пути для VS2010: if %iCompVer%==11 set gavIncPathMy=%SYSTEMDRIVE%\Program Files (x86)\Windows Kits\8.0\Include\um if %iCompVer%==11 set gavIncPathMy2=%SYSTEMDRIVE%\Program Files (x86)\Windows Kits\8.0\Include\Shared if %iCompVer%==11 set gavLibPathMy=%SYSTEMDRIVE%\Program Files (x86)\Windows Kits\8.0\Include\Lib if %iCompVer%==11 set gavLibPathMy2=%SYSTEMDRIVE%\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86 ::if %iCompVer%==11 set gavLibPathMy2=%SYSTEMDRIVE%\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64 echo Compilator version: VC%iCompVer% echo Compilator path: %sVSPathName% :: -------------------------------------- :: :: Пути к Boost :: :: -------------------------------------- :: set BOOST_ROOT=C:\Progs\boost\boost_1_49_0 :: -------------------------------------- :: :: Настройка путей к подключаемым :: :: файлам. Каждый путь должен быть :: :: отдельной переменной ! :: :: -------------------------------------- :: set gavIncPathVS="%sVSPath%\include" set gavIncPathQt="%QTDIR%\include" set gavIncPathBoost="%BOOST_ROOT%" set gavIncPathDdkCrt="C:\Progs\WINDDK\2600.1106\inc\crt" set gavIncPathDdkXP="C:\Progs\WINDDK\2600.1106\inc\w2k" if not "%gavIncPathMy%"=="" (set gavIncPathAll=-I"%gavIncPathMy%" if not "%gavIncPathMy2%"=="" ( set gavIncPathAll=-I"%gavIncPathMy%" -I"%gavIncPathMy2%" ) ) if %iWinddk%==1 (set gavIncPathAll=%gavIncPathAll% -I%gavIncPathDdkCrt% -I%gavIncPathDdkXP%) if not %gavIncPathVS%=="" (set gavIncPathAll=%gavIncPathAll% -I%gavIncPathVS%) if %bLibQt%==1 (if not %gavIncPathQt%=="" (set gavIncPathAll=%gavIncPathAll% -I%gavIncPathQt%)) if %bLibBoost%==1 (if not %gavIncPathBoost%=="" (set gavIncPathAll=%gavIncPathAll% -I%gavIncPathBoost%)) echo Include pathes: %gavIncPathAll% :: -------------------------------------- :: :: Настройка путей к библиотечным (.lib) :: :: файлам. Каждый путь должен быть :: :: отдельной переменной ! :: :: -------------------------------------- :: set gavLibPathDdkXP=C:\Progs\WINDDK\2600.1106\lib\wxp\i386 set gavLibPathVS=%sVSPath%\lib set gavLibPathAll="" if %iWinddk%==1 (set gavLibPathAll=%gavLibPathAll% /LIBPATH:"%gavLibPathDdkXP%") if not "%gavLibPathVS%"=="" (set gavLibPathAll=%gavLibPathAll% /LIBPATH:"%gavLibPathVS%") if not "%gavLibPathMy%"=="" (set gavLibPathAll=%gavLibPathAll% /LIBPATH:"%gavLibPathMy%" if not "%gavLibPathMy2%"=="" ( set gavLibPathAll=%gavLibPathAll% /LIBPATH:"%gavLibPathMy%" /LIBPATH:"%gavLibPathMy2%" ) ) set gavLibPathBoost="%BOOST_ROOT%\stage\lib" if %bLibBoost%==1 (if not %gavLibPathBoost%=="" (set gavLibPathAll=%gavLibPathAll% /LIBPATH:%gavLibPathBoost%)) set gavLibPathQtReleaseShared="%QTDIR%\lib\release\shared" set gavLibPathQtReleaseStatic="%QTDIR%\lib\release\static" set gavLibPathQtDebugShared="%QTDIR%\lib\debug\shared" set gavLibPathQtDebugStatic="%QTDIR%\lib\debug\static" if %bLibQt%==1 ( if %iModeComp%==0 ( if %iModeQt%==0 ( echo Qt mode: release shared set gavLibPathAll=%gavLibPathAll% /LIBPATH:%gavLibPathQtReleaseShared% ) if %iModeQt%==1 ( echo Qt mode: release static set gavLibPathAll=%gavLibPathAll% /LIBPATH:%gavLibPathQtReleaseStatic% ) ) if %iModeComp%==1 ( if %iModeQt%==0 ( echo Qt mode: debug shared set gavLibPathAll=%gavLibPathAll% /LIBPATH:%gavLibPathQtDebugShared% ) if %iModeQt%==1 ( echo Qt mode: debug static set gavLibPathAll=%gavLibPathAll% /LIBPATH:%gavLibPathQtDebugStatic% ) ) ) echo Lib pathes: %gavLibPathAll% :: -------------------------------------- :: :: Файлы библиотеки run-time. :: :: При необходимости добавить сюда нужные :: :: -------------------------------------- :: set gavLibFilesCrt="" if %bLibCrt%==1 (set gavLibFilesCrt=user32.lib ole32.lib Gdi32.lib Ws2_32.lib Imm32.lib Comdlg32.lib Winspool.lib Advapi32.lib) if not "%gavLibFilesCrt%"=="" (set gavLibFilesAll=%gavLibFilesCrt%) :: -------------------------------------- :: :: Файлы библиотеки Qt. :: :: -------------------------------------- :: set gavLibFilesQtShared=qtmain.lib qt-mt333.lib set gavLibFilesQtStatic=qtmain.lib qt-mt.lib if %bLibQt%==1 ( if %iModeQt%==0 (set gavLibFilesAll=%gavLibFilesAll% %gavLibFilesQtShared%) if %iModeQt%==1 (set gavLibFilesAll=%gavLibFilesAll% %gavLibFilesQtStatic%) ) echo Lib files: %gavLibFilesAll% :: -------------------------------------- :: :: Настройка режимов компиляции :: :: -------------------------------------- :: if %iModeComp%==0 ( set gavLinkMode=/RELEASE :: для DLL: set gavCompMode=/MD set gavCompMode=/MT set gavOptimize=/O2 /GA ) if %iModeComp%==1 ( set gavLinkMode=/DEBUG :: для DLL: set gavCompMode=/MDd set gavCompMode=/MTd ::set gavOptimize=/Od /ZI set gavOptimize=/Od /Z7 ) if %iModeComp%==2 ( set gavLinkMode= set gavCompMode= set gavOptimize=/Zg ) if %bLibQt%==1 (if %iModeQt%==1 (set gavCompMode=/MDd)) :: -------------------------------------- :: :: Настройка подсистемы приложения :: :: -------------------------------------- :: if not %gavSubsystem%=="" (set gavLinkSubsys=/SUBSYSTEM:%gavSubsystem%) :: -------------------------------------- :: :: Настройка компилятора :: :: -------------------------------------- :: if %bLibQt%==1 ( if %iModeQt%==0 (set gavCompilFlags=%gavCompilFlags% -DQT_DLL) ) :: -------------------------------------- :: :: Удаление старых файлов :: :: -------------------------------------- :: set gavOldObj=%gavSrc:.cpp=.obj,% set gavOldObj=%gavOldObj:.c=.obj,% set gavOldAsm=%gavOldObj:.obj=.asm% for /F "tokens=1" %%A in ("%gavSrc%") do (set gavMainName=%%A) set gavMainName=%gavMainName:.cpp=% set gavMainName=%gavMainName:.c=% set gavDelExt= %gavMainName%.exe, %gavMainName%.pdb, %gavMainName%.ilk, %gavOldObj% %gavOldAsm% __vc++_%gavMainName%.log echo. echo Deleting old files: %gavDelExt% ... echo. del %gavDelExt% echo. echo ------------------ echo Compiling start... echo ------------------ echo. if %bLibQt%==1 (if not %gavSrcQtMoc%=="" ( echo ------------------ echo Mocing file... echo ------------------ echo on %QTDIR%\bin\moc %gavSrcQtMoc% -o moc_%gavSrcQtMoc%.cpp @echo off set gavSrc=%gavSrc% moc_%gavSrcQtMoc%.cpp )) echo on "%sVSPathName%" /EHsc %gavIncPathAll% %gavCompilFlags% /Fa %gavSrc% %gavCompMode% %gavOptimize% /link %gavLinkSubsys% %gavLinkMode% %gavLibPathAll% %gavLibFilesAll%>"__vc++_%gavMainName%.log" @echo off echo. echo ------------------ echo Compiling end... echo ------------------ echo. echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- :: -------------------------------------- :: pause
Основные параметры, которые следует однократно настроить в вышеприведённом сценарии:
1) в разделе «Пути к Visual Studio» необходимо задать пути к файлам различных версий Visual Studio (если у вас их установлено несколько):
- sVSPath — путь к основному каталогу Visual Studio т.е. к корневому каталогу, в котором содержатся все прочие подкаталоги для данной версии VS.
- gavIncPathMy — возможно для VS 11.0 потребуется задать свои пути к подключаемым заголовочным файлам.
2) в разделе «Пути к Boost» можно задать BOOST_ROOT — путь к коревому каталогу библиотеки Boost (если она у вас установлена).
3) в разделе «Настройка путей к подключаемым файлам» при необходимости можно задать пути к заголовочным файлам Qt, WinDDK.
4) в разделе «Настройка путей к библиотечным (.lib) файлам» задаются пути к файлам библиотек (в частности для WinDDK).
Реже может возникнуть необходимость настроить следующие параметры под конкретный проект:
iCompVer — версия используемого компилятора (6 — для VC6, 8 — VC8 (2005), 9 — VC9, 10 — VC10 (2010), 11 — VC11 (2012).
gavLibFilesQtShared — имена .lib-файлов для динамически подключаемой библиотеки Qt;
gavLibFilesQtStatic — имена .lib-файлов для статически линкуемой библиотеки Qt.
gavLibFilesCrt — имена .lib-файлов для стандартных динамических библиотек, используемых в Windows.
iModeQt — режим линковки библиотеки Qt.
gavCompMode — флаги режима компиляции (однопоточные, многопоточные и т.п.).
gavOptimize — флаги оптимизации кода компилятором.
Чаще всего приходится менять параметры:
gavSrc — имена файлов с исходным кодом, разделённые пробелом (если их несколько).
bLibQt — флаг (0/1) необходимости использовать библиотеку Qt при сборке приложения.
bLibCrt — флаг (0/1) необходимости использовать стандартные CRT-библиотеки Windows при сборке приложения.
bLibBoost — флаг (0/1) необходимости использовать библиотеку Boost при сборке приложения.
gavSubsystem — подсистема создаваемого приложения: CONSOLE — консольное, WINDOWS — с графическим интерфейсом.
Результат (ошибки, сообщения) компиляции можно просмотреть в файле __vc++_XXX.log, где XXX — имя основного исходного файла
Сборка cpp-приложения из файлов проектов
Аналогично без запуска IDE можно собрать проект, используя файлы проектов и воркспейсов (dsp, dsw).
:: Перед использованием сценария рекомендуется задать системную переменную sVSPathName, :: указывающую путь к основному исполнимому файлу Visual Studio либо раскомментировать :: и отредактировать sVSPathName ниже в этом файле... @echo off cls echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- :: -------------------------------------- :: :: имя файла проекта (dsp) или вокспейса (dsw): set sPrjFile=MyWorkspace.dsp :: -------------------------------------- :: :: Режим компиляции: 0 - release, 1 - debug, 2 - release и debug: set iMode=2 :: -------------------------------------- :: :: Режим обработки файлов: :: 0 - удаление промежуточных файлов, :: 1 - перекомпиляция изменившихся фйлов, :: 2 - полная пересборка проекта (рекомендуется при iMode=2) set iSubMode=2 :: -------------------------------------- :: :: Имя конфигурации: if %sPrjFile:.dsp=% == %sPrjFile% ( set sPrjName=%sPrjFile:.dsw=% ) ELSE ( set sPrjName=%sPrjFile:.dsp=% ) :: Имя конфигурации - для режима release: set sConfigNameRelease="%sPrjName% - Win32 Release" :: Имя конфигурации - для режима debug: set sConfigNameDebug="%sPrjName% - Win32 Debug" :: -------------------------------------- :: :: пути к Visual Studio: :: set sVSPathName=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 6.0\Common\MSDev98\Bin\MSDEV.EXE :: set sVSPathName=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 8\Common7\IDE\VCExpress.exe :: set sVSPathName=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe :: -------------------------------------- :: :: Подрежим: if %iSubMode%==0 ( set iCompMode=/CLEAN ) if %iSubMode%==1 ( set iCompMode= ) if %iSubMode%==2 ( set iCompMode=/REBUILD ) :: -------------------------------------- :: echo. echo --------------------------------- echo [%sPrjName%]: compiling start... echo --------------------------------- echo. @echo off if %iMode%==0 ( :: режим release: echo [%sPrjName%]: configuration mode: echo %sConfigNameRelease% echo on "%sVSPathName%" %sPrjFile% /MAKE %sConfigNameRelease% %iCompMode% /OUT __vc++_compile_release.log ) @echo off if %iMode%==1 ( :: режим debug: echo [%sPrjName%]: configuration mode: echo %sConfigNameDebug% echo on "%sVSPathName%" %sPrjFile% /MAKE %sConfigNameDebug% %iCompMode% /OUT __vc++_compile_debug.log ) @echo off if %iMode%==2 ( :: режим release и debug: echo [%sPrjName%]: configuration modes: echo %sConfigNameRelease% echo %sConfigNameDebug% echo on "%sVSPathName%" %sPrjFile% /MAKE %sConfigNameRelease% %iCompMode% /OUT __vc++_compile_release.log "%sVSPathName%" %sPrjFile% /MAKE %sConfigNameDebug% %iCompMode% /OUT __vc++_compile_debug.log ) @echo off echo. echo --------------------------------- echo [%sPrjName%]: compiling end. echo --------------------------------- echo. echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- :: -------------------------------------- :: pause
Компиляция cs-файлов
Вышерассмотренный функционал реализуем и для C#:
:: --------------------------------------------------------------------------- :: :: Перед использованием сценария рекомендуется задать системные переменные: :: :: sVSPath - путь к корневому каталогу Visual C#, :: :: sVSPathName - путь к основному исполнимому файлу Visual C# :: :: (либо отредактировать sVSPath, sVSPathName ниже в файле.:: :: --------------------------------------------------------------------------- :: echo off cls echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- :: -------------------------------------- :: :: Имена исходников (через пробел) :: :: -------------------------------------- :: set gavSrc=Program.cs :: -------------------------------------- :: :: Режим компиляции: :: :: 0 - release, :: :: 1 - debug, :: :: -------------------------------------- :: set iModeComp=1 :: -------------------------------------- :: :: Подсистема приложения (одна из) :: :: -------------------------------------- :: :: /target:exe Построить консольный исполняемый файл (по умолчанию) (Краткая форма: /t:exe) set gavSubsystem=exe :: /target:winexe Построить исполняемый файл Windows (Краткая форма: /t:winexe) ::set gavSubsystem=winexe :: /target:library Построить библиотеку (Краткая форма: /t:library) ::set gavSubsystem=library :: /target:module Построение модуля, который может быть добавлен в другую сборку (Краткая форма: /t:module) ::set gavSubsystem=module :: /target:appcontainerexe Построение исполняемого файла Appcontainer (Краткая форма: /t:appcontainerexe) ::set gavSubsystem=appcontainerexe :: /target:winmdobj Построение промежуточного файла среды выполнения Windows, используемого WinMDExp (Краткая форма: /t:winmdobj) ::set gavSubsystem=winmdobj :: -------------------------------------- :: :: ПЛАТФОРМА приложения (одна из) :: :: (x86, Itanium, x64, arm или anycpu. :: :: Платформа по умолчанию: anycpu.) :: :: -------------------------------------- :: set gavPlatform=anycpu :: -------------------------------------- :: :: Дополнительные флаги компилятора :: :: -------------------------------------- :: ::set gavCompilFlags= :: -------------------------------------- :: :: Пути к Visual Studio. :: :: !!! без кавычек !!! :: :: -------------------------------------- :: set sVSPath=%WINDIR%\Microsoft.NET\Framework\v4.0.30319 set sVSPathName=%sVSPath%\csc.exe :: -------------------------------------- :: :: Настройка путей к подключаемым :: :: файлам. Каждый путь должен быть :: :: отдельной переменной ! :: :: -------------------------------------- :: set gavIncPathVS="%sVSPath%" if not "%gavIncPathMy%"=="" (set gavIncPathAll=-I"%gavIncPathMy%") if not %gavIncPathVS%=="" (set gavIncPathAll=%gavIncPathAll% -I%gavIncPathVS%) echo Include pathes: %gavIncPathAll% :: -------------------------------------- :: :: Настройка путей к библиотечным (.lib) :: :: файлам. Каждый путь должен быть :: :: отдельной переменной ! :: :: -------------------------------------- :: set gavLibPathVS=%sVSPath% if not "%gavLibPathVS%"=="" (set gavLibPathAll=/lib:"%gavLibPathVS%") if not "%gavLibPathMy%"=="" (set gavLibPathAll=%gavLibPathAll% /lib:"%gavLibPathMy%") echo Lib pathes: %gavLibPathAll% :: -------------------------------------- :: :: Файлы библиотеки run-time. :: :: При необходимости добавить сюда нужные :: :: -------------------------------------- :: :: set gavLibFilesCrt=user32.lib ole32.lib Gdi32.lib Ws2_32.lib Imm32.lib Comdlg32.lib Winspool.lib Advapi32.lib ::set gavLibFilesCrt="" if not "%gavLibFilesCrt%"=="" (set gavLibFilesAll=%gavLibFilesCrt%) echo Lib files: %gavLibFilesAll% :: -------------------------------------- :: :: Настройка режимов компиляции :: :: -------------------------------------- :: if %iModeComp%==0 ( set gavCompilFlags=%gavCompilFlags% /D:_RELEASE set gavCompMode=/debug- set gavOptimize=/optimize+ ) if %iModeComp%==1 ( set gavCompilFlags=%gavCompilFlags% /D:_DEBUG set gavCompMode=/debug+ set gavOptimize=/optimize- ) :: -------------------------------------- :: :: Настройка подсистемы приложения :: :: -------------------------------------- :: if not %gavSubsystem%=="" (set gavLinkSubsys=/t:%gavSubsystem%) :: -------------------------------------- :: set gavDelExt=*.obj, *.exe, *.log, *.pdb echo. echo Deleting old files: %gavDelExt% ... echo. del %gavDelExt% echo. echo ------------------ echo Compiling start... echo ------------------ echo. echo on "%sVSPathName%" %gavDefine% %gavCompilFlags% %gavCompMode% %gavOptimize% %gavLinkSubsys% /utf8output /fullpaths /platform:%gavPlatform% %gavLibPathAll% %gavLibFilesAll% %gavSrc%>__vc#_compile.log @echo off echo. echo ------------------ echo Compiling end... echo ------------------ echo. echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- :: -------------------------------------- :: pause
Сборка cs-приложения из файлов солюшенов (sln) и проектов (csproj)
:: Перед использованием сценария рекомендуется задать системную переменную sVSPathName, :: указывающую путь к основному исполнимому файлу Visual Studio либо раскомментировать :: и отредактировать sVSPathName ниже в этом файле... @echo off cls echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- :: -------------------------------------- :: :: имя файла проекта (.csproj) или вокспейса (sln): set sPrjFile=MyProject.csproj :: -------------------------------------- :: :: Режим компиляции: 0 - release, 1 - debug, 2 - release и debug: set iMode=2 :: -------------------------------------- :: :: Режим обработки файлов: :: 0 - удаление промежуточных файлов, :: 1 - перекомпиляция изменившихся фйлов, :: 2 - полная пересборка проекта (рекомендуется при iMode=2) set iSubMode=2 :: -------------------------------------- :: :: Имя конфигурации: if %sPrjFile:.sln=% == %sPrjFile% ( set sPrjName=%sPrjFile:.sln=% ) ELSE ( set sPrjName=%sPrjFile:.csproj=% ) :: Имя конфигурации - для режима release: :: set sConfigNameRelease="Release|Win32" set sConfigNameRelease="Release" :: Имя конфигурации - для режима debug: :: set sConfigNameDebug="Debug|Win32" set sConfigNameDebug="Debug" :: -------------------------------------- :: :: пути к Visual Studio: set sVSPathName=%SYSTEMDRIVE%\Program Files (x86)\Microsoft Visual Studio\11.0\Common7\IDE\devenv.exe :: set sVSPathName=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 8\Common7\IDE\VCExpress.exe :: set sVSPathName=%SYSTEMDRIVE%\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe :: -------------------------------------- :: :: Подрежим: if %iSubMode%==0 ( set iCompMode=/Clean ) if %iSubMode%==1 ( set iCompMode= ) if %iSubMode%==2 ( set iCompMode=/Rebuild ) :: -------------------------------------- :: echo. echo --------------------------------- echo [%sPrjName%]: compiling start... echo --------------------------------- echo. @echo off if %iMode%==0 ( :: режим release: echo [%sPrjName%]: configuration mode: echo %sConfigNameRelease% echo on "%sVSPathName%" %sPrjFile% /Build %sConfigNameRelease% /Out __vc#_compile_release.log ) @echo off if %iMode%==1 ( :: режим debug: echo [%sPrjName%]: configuration mode: echo %sConfigNameDebug% echo on "%sVSPathName%" %sPrjFile% /Build %sConfigNameDebug% /Out __vc#_compile_debug.log ) @echo off if %iMode%==2 ( :: режим release и debug: echo [%sPrjName%]: configuration modes: echo %sConfigNameRelease% echo %sConfigNameDebug% echo on "%sVSPathName%" %sPrjFile% /Build %sConfigNameRelease% /Out __vc#_compile_release.log "%sVSPathName%" %sPrjFile% /Build %sConfigNameDebug% /Out __vc#_compile_debug.log Rem /project lxDbLib.csproj /projectconfig Debug ) @echo off echo. echo --------------------------------- echo [%sPrjName%]: compiling end. echo --------------------------------- echo. echo -------------------------------------- echo ------ %date% [%time%] ------ echo -------------------------------------- echo ---------- .:: -=LEXX=- ::. ---------- echo -------------------------------------- :: -------------------------------------- :: pause
На первый взгляд громоздкость данного кода, компенсируется простотой последующей работы в консоли. Всем приятного программирования!!!
ссылка на оригинал статьи http://habrahabr.ru/post/215835/
Добавить комментарий