рд░реВрдмреА рдореЗрдВ рд╕реА / рд╕реА ++ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рд░рд▓ рд╕реНрд╡рдЪрд╛рд▓рди

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдмрджреНрдз рдСрдЯреЛ-рд╡реГрджреНрдзрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде NSN рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рд▓рд┐рдП SVN рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╢рд░реАрд░ рдХреА рдЧрддрд┐ рдХреЛ рдХрдо рдХрд░рдирд╛ред рдореИрдиреБрдЕрд▓ рдореЛрдб рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдерд╛ рдХреА рднреЗрджреНрдпрддрд╛ рдХреЛ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдХрдИ рдмрд┐рдВрджреБ рдЫреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реЛрддреЗ рд╣реИрдВред

рдирдП рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рдЧрднрдЧ рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВ C / C ++ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред

рдпрд╣ рдПрдмреАрд╕реАрдбреА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдП рдФрд░ рдмреА рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬ рд╕рдВрдХрд▓рди рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрдзреАрди рд╣реИрдВ:

рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИ, рдЬреЛ .rc рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдХрд░ рд╕рдВрдХрд▓рд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИред рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдирдПрд╕рдЖрдИрдПрд╕ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MyApp-1.0.837.1.exeред рдпрд╣ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЪрд░рдгреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред

рдСрдЯреЛ-рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ


рдПрд╕рд╡реАрдПрди рд╕рдВрд╢реЛрдзрди рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдзрд╛рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ SubWCRev.exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдмрд┐рд▓реНрдб рдирдВрдмрд░ рдХреЗ рдСрдЯреЛ-рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░реА-рдмрд┐рд▓реНрдб рдЗрд╡реЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ ред

VersionInfo.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
#ifndef __VERSION_INFO_H #define __VERSION_INFO_H #define APP_NAME "MyApp" #define APP_VERSION 1,0,,0 #define APP_VERSION_S "" #define APP_DATE "" #endif 

рдФрд░ рдЗрд╕реЗ .rc рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ (рдЙрд╕ рдкрде рдХрд╛ рд╕рдВрдХреЗрдд рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рд╣реЗрдЬрд╛ рд╣реИ):
 #include "../src/VersionInfo.h" 

рд╣рдо рдЕрдВрддрд┐рдо рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╛рдж рдореЗрдВ .nsi рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛:
  FILEVERSION APP_VERSION PRODUCTVERSION APP_VERSION 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж VersionBuild.rb
 C:\Ruby193\bin\ruby VersionBuild.rb VersionInfo.h 

SubWCRev.exe рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб $ WCREV $ рдФрд░ $ WCNOW = $ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ VersionInfo.h рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
 #define APP_VERSION 1,0,$WCREV$,1 #define APP_VERSION_S "1.0.$WCREV$.1" #define APP_DATE "$WCNOW=%d.%m.%Y %H:%M$" 

 #define APP_VERSION 1,0,$WCREV$,2 #define APP_VERSION_S "1.0.$WCREV$.2" #define APP_DATE "$WCNOW=%d.%m.%Y %H:%M$" 

 ... 

рдмрд╛рдж рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ
 SubWCRev.exe .. VersionInfo.h VersionInfo.h 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SVN рд╕рдВрд╢реЛрдзрди рд╕рдВрдЦреНрдпрд╛ рдФрд░ рджрд┐рдирд╛рдВрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛
 #define APP_VERSION 1,0,29,2 #define APP_VERSION_S "1.0.29.2" #define APP_DATE "01.11.2012 20:09" 

VersionBuild.rb рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╛рд░реВрдкрдг (рд╕реНрдерд╛рди / рдЯреИрдм) рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реЛ:
 FNAME = ARGV[0] file = File::read(FNAME) ANY_IN_QUOTES = Regexp.new('"[^"]*"') def replaceVersion(file) #   APP_VERSION matcher = Regexp.new('APP_VERSION\s*[^\r\n]*') line = file.match(matcher)[0] old_ver = /(\d+),(\d+),(.*),(\d+)/ line.match(old_ver) new_ver = [$1, $2, "$WCREV$", $4.to_i + 1] line.sub!(old_ver, new_ver.join(",")) file.sub!(matcher, line) #   APP_VERSION_S matcher = Regexp.new('APP_VERSION_S\s*' + ANY_IN_QUOTES.source) line = file.match(matcher)[0] line.sub!(ANY_IN_QUOTES, '"' + new_ver.join(".") + '"') file.sub!(matcher, line) end def replaceDate(file) #   APP_DATE matcher = Regexp.new('APP_DATE\s*' + ANY_IN_QUOTES.source) date = file.match(matcher)[0] date.sub!(ANY_IN_QUOTES, '"$WCNOW=%d.%m.%Y %H:%M$"') file.sub!(matcher, date) end replaceVersion(file) replaceDate(file) File::write(FNAME, file) 

рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдгрдЗрдиреНрдлреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЗрдбрд░ рдореЗрдВ, рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЙрдХреНрд╕реА рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
 #include "Version.h" #include "VersionInfo.h" const char *Version() { return APP_VERSION_S; } const char *BuildDate() { return APP_DATE; } 


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗрдЯрдЕрдк рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдиреАрдЪреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ exe (рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ NSIS рдлрд╝рд╛рдЗрд▓ рд╣реИред
 !include "MUI.nsh" ;     ;!define APP_NAME "MyApp" ;!define MAJOR_VERSION "1" ;!define MINOR_VERSION "0" ;!define SVN_REVISION "29" ;!define BUILD_NUMBER "2" ;!define APP_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${SVN_REVISION}.${BUILD_NUMBER}" ;!define SETUP_NAME "${APP_NAME}-${APP_VERSION}.exe" Name ${SETUP_NAME} OutFile ${SETUP_NAME} InstallDir $PROGRAMFILES\${APP_NAME} VIProductVersion ${APP_VERSION} VIAddVersionKey "ProductName" ${APP_NAME} VIAddVersionKey "Comments" "" VIAddVersionKey "CompanyName" "" VIAddVersionKey "LegalTrademarks" "" VIAddVersionKey "LegalCopyright" "┬й " VIAddVersionKey "FileDescription" ${APP_NAME} VIAddVersionKey "FileVersion" ${APP_VERSION} !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE "Russian" Section "${APP_NAME} (required)" SetOutPath $INSTDIR File "${APP_NAME}.exe" WriteUninstaller "uninstall.exe" SectionEnd Section "Uninstall" Delete "$INSTDIR\*.*" Delete "$SMPROGRAMS\${APP_NAME}\*.*" Delete "$DESKTOP\${APP_NAME}.lnk" RMDir "$SMPROGRAMS\${APP_NAME}" RMDir "$INSTDIR" SectionEnd Section "Start Menu and Desktop Shortcuts" CreateDirectory "$SMPROGRAMS\${APP_NAME}" CreateShortCut "$SMPROGRAMS\${APP_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_NAME}.exe" SectionEnd 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕реНрдерд┐рд░рд╛рдВрдХ APP_NAME рдФрд░ APP_VERSION рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ makensis.exe рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред SetupBuild.rb рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдЗрдирдкреБрдЯ рд▓рд┐рдпрд╛ рдЬрд╛рдП:
 C:\Ruby193\bin\ruby SetupBuild.rb MyApp.exe 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж MyApp.exe рдореЗрдВ APP_VERSION_S = "1.0.29.2" рдерд╛, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧреА рдФрд░ рдпрджрд┐ рд╕рдлрд▓ рд╣реЛ, рддреЛ рд╕реНрдерд╛рдкрдирд╛ рдлрд╝рд╛рдЗрд▓ MyApp-1.0.29.2.exe рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреА, рдЕрдиреНрдпрдерд╛ NSIS рд╕реЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдиреЛрдЯрдмреБрдХред

рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрд░реЛрдд рдкреИрдХреЗрдЬ SetupBuild.rb:
 NSIS_MAKE = '"C:\Program Files (x86)\NSIS\makensis.exe"' require 'win32ole' def versionOf(fname) fso = WIN32OLE.new("Scripting.FileSystemObject") return fso.GetFileVersion(fname) end def alert(msg) fso = WIN32OLE.new("WScript.Shell") fso.Popup msg end SRC_FNAME = File::expand_path(ARGV[0]) APP_NAME = File::basename(SRC_FNAME, '.*') params = Hash.new params['APP_NAME'] = APP_NAME params['APP_VERSION'] = versionOf(SRC_FNAME) params['SETUP_NAME'] = "#{APP_NAME}-#{params['APP_VERSION']}.exe" # /D        NSIS ( !define) cmd = params.map{|key, val| "/D#{key}=#{val}"}.join(" ") LOG_FNAME = "#{APP_NAME}_#{$0}.log" r = system("#{NSIS_MAKE} #{cmd} #{APP_NAME}.nsi > #{LOG_FNAME}") if r File::delete(LOG_FNAME) else system('notepad', LOG_FNAME) end 


рдХреЗ рдЙрдкрдпреЛрдЧ


рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2008 рдЯреЗрд╕реНрдЯ рдПрд╕рд╡реАрдПрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╣рд╛рдВ рд╣реИ ред

рд╕реНрдерд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ:

рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ-> рдЧреБрдг-> рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ-> рдкреНрд░реА-рдмрд┐рд▓реНрдб рдЗрд╡реЗрдВрдЯ-> рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗрдЯ рд╣реИ
 C:\Ruby193\bin\ruby "..\src\VersionBuild.rb" "..\src\VersionInfo.h" SubWCRev.exe .. "..\src\VersionInfo.h" "..\src\VersionInfo.h" 

рдЬрдм рд╕реЗрдЯрдЕрдк \ SetupBuild.bat рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реЛ
 C:\Ruby193\bin\ruby SetupBuild.rb MyApp.exe 

рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ MyApp-1.0.xyexe рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ x SVN рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╣реИ, y рд╕рдВрдХрд▓рди рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ рдореЗрдВ SetupBuild.bat рдХреЛ рдЬрдЧрд╣ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдкрд░ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/In157197/


All Articles