Частенько нет необходимости запускать тяжеловесную IDE Visual Studio для компиляции небольших приложений, проведения каких-либо тестов кода, не требующего полномасштабной отладки. В подобных случаях можно оперативно собрать приложение в консольном режиме, используя возможности предоставляемые компилятором от Microsoft (cl.exe) и запускными модулями IDE (devenv.exe, msdev.exe). Далее приводится код файлов сценариев (cmd) интерпретатора командной строки Windows, который с небольшими изменениями каждый может настроить под себя, с учётом путей к Visual Studio в своей системе.
Основные параметры, которые следует однократно настроить в вышеприведённом сценарии:
1) в разделе «Пути к Visual Studio» необходимо задать пути к файлам различных версий Visual Studio (если у вас их установлено несколько):
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 — имя основного исходного файла
Аналогично без запуска IDE можно собрать проект, используя файлы проектов и воркспейсов (dsp, dsw).
Вышерассмотренный функционал реализуем и для C#:
На первый взгляд громоздкость данного кода, компенсируется простотой последующей работы в консоли. Всем приятного программирования!!!
Компиляция 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
На первый взгляд громоздкость данного кода, компенсируется простотой последующей работы в консоли. Всем приятного программирования!!!