Компиляция исходников (cpp, cs) компилятором Visual Studio без запуска IDE в Windows

от автора

Частенько нет необходимости запускать тяжеловесную IDE Visual Studio для компиляции небольших приложений, проведения каких-либо тестов кода, не требующего полномасштабной отладки. В подобных случаях можно оперативно собрать приложение в консольном режиме, используя возможности предоставляемые компилятором от Microsoft (cl.exe) и запускными модулями IDE (devenv.exe, msdev.exe). Далее приводится код файлов сценариев (cmd) интерпретатора командной строки Windows, который с небольшими изменениями каждый может настроить под себя, с учётом путей к Visual Studio в своей системе.

Компиляция cpp-файлов

Код сценария vc++_compile_and_link.cmd

:: --------------------------------------------------------------------------- :: :: Перед использованием сценария рекомендуется задать системные переменные:    :: :: 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).

Код сценария vc++_dsp_dsw_compile.cmd

:: Перед использованием сценария рекомендуется задать системную переменную 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#:

Код сценария vc#_compile_and_link.cmd

:: --------------------------------------------------------------------------- :: :: Перед использованием сценария рекомендуется задать системные переменные:    :: :: 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)

Код сценария vc#_sln_csproj_compile.cmd

:: Перед использованием сценария рекомендуется задать системную переменную 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *