Примеры использования пакетных файлов для автоматической компиляции и обновления Miranda IM
Введение
Перед прочтением данной темы настоятельно рекомендуется ознакомиться с гайдом Самостоятельная компиляция плагинов Miranda IM.
При самостоятельной компиляции Miranda IM и плагинов есть немало пунктов, которые можно автоматизировать с помощью пакетных файлов (обновление исходников из SVN, компиляция и даже обновление собственной сборки).
Создать пустой пакетный файл легко: правый клик мыши по свободному полю на рабочем столе или в Эксплорере, выбрать «Создать», из списка выбрать «Текстовый документ». Создается пустой текстовый файл с названием Новый текстовый документ.txt. Переименовываем его в MyBatch.bat. Всё, пакетник готов! Теперь открываем его для редактирования: правый клик по файлу, выбираем пункт «Изменить», файл откроется для редактирования в Блокноте.
Для ленивых выкладываю пакетный файл, который создаст все нижеперечисленные примеры пакетных файлов.
файл CreateBatchFiles.bat
Инструкция к применению: распаковать в корневой директории исходников (рядом с директориями miranda и miranda-tools) и запустить CreateBatchFiles.bat.
Обновление исходников
Этот раздел устарел и нуждается в переработке.
Перед компиляцией исходники обычно обновляют из SVN-репозитория. Несмотря на все удобства, предоставляемые чудесным SVN-клиентом TortoiseSVN, для автоматизации обновлений нам нужен консольный SVN-клиент. SlikSVN прекрасно подходит для этих целей — часто обновляется, имеет небольшой размер дистрибутива, при установке прописывается в path операционной системы (важно для запуска из пакетных файлов).
В корневой директории исходников (рядом с директориями miranda и miranda-tools) создаем пакетный файл SvnUpdate.bat со следующим содержимым:
svn cleanup :: В рабочей копии выполняет поиск и выполнение незавершенных лог файлов, удаляя по ходу выполнения блокировки в рабочей копии. svn update > update.txt :: Собственно выполняет обновление, записывая результаты в файл "update.txt". svn log -v -l 20 > svn.log :: Пишет в файл "svn.log" журнал последних 20-ти событий в SVN репозитории.
Компиляция
Автоматизация компиляции
Далее переходим к автоматизации запуска процесса компиляции в MS VS 2010 Express (именно 2010 Express будет рассматриваться во всех примерах). Открываем miranda32.sln в MS VS 2010 и настраиваем (статика, динамика, оптимизации), выходим из студии, сохранив изменения. Следующий пример пакетника обновляет исходники, компилирует ядро и плагины, очищает папку Release Unicode от лишнего мусора (папка Obj и дебаг-символы *.pdb). На выходе получаем в miranda\bin10 папку Release Unicode c ядром и плагинами и файл журнала компилятора rebuild.log, в который пишется весь процесс компиляции (аналог окна Output в MS VS 2010).
Создаем в корне исходников пакетный файл BuildSolution2010.bat со следующим содержимым:
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. cd miranda\bin10 :: Переход в директорию "miranda\bin10". if exist "Release Unicode" rd /Q /S "Release Unicode" >nul :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. "%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln" :: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log". rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории.
Компиляция для платформы x64
Всё вышесказанное верно, с той лишь разницей, что указывается "Release Unicode|x64" как желаемый тип платформы в пакетном файле.
Создаем в корне исходников пакетный файл BuildSolution2010_x64.bat со следующим содержимым:
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. :: cd miranda\bin10 :: Переход в директорию "miranda\bin10". :: if exist "Release Unicode" rd /Q /S "Release Unicode" :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. :: "%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode|x64" "miranda32.sln" :: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode|x64" и создать файл журнала "rebuild.log". :: rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. :: del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории.
Создание архива на выходе в директории Dropbox
Следующим примером будет упаковка скомпилированного ядра с плагинами в архив и перемещение в папку сервиса Dropbox (В моем случае путь к папке E:\Dropbox, отредактируйте в пакетнике в соответствии с вашими данными) Для создания архивов как нельзя лучше подойдет свободный архиватор 7-Zip, качаем и устанавливаем. На выходе получим файл miranda-0.10.latest-vc2010.7z в директории E:\Dropbox\Public.
Создаем в корне исходников пакетный файл BuildAndArchive.bat со следующим содержимым:
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. cd miranda\bin10 :: Переход в директорию "miranda\bin10". if exist "Release Unicode" rd /Q /S "Release Unicode" >nul :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. "%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln" :: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log". rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории. pushd "Release unicode" :: Переход в директорию "Release unicode" с запоминанием предыдущей директории. "%PROGRAMFILES%\7-zip\7z.exe" a -r -mx=9 "miranda-0.10.latest-vc2010.7z" :: Создание архива 7-zip "miranda-0.10.latest-vc2010.7z" с использованием максимального сжатия. copy /V /Y miranda-*.7z "E:\Dropbox\Public" :: Копирование файлов по маске "miranda-*.7z" в директорию "E:\Dropbox\Public" (отредактировать путь) с проверкой правильности копирования и подавлением запроса подтверждения на перезапись файла. popd Переход в предыдущую директорию, запомненную командой "pushd". rd /S /Q "Release Unicode" :: Удаление папки "Release Unicode" со всем содержимым.
Автоматическое обновление сборки
А сейчас перейдем к самому интересному — обновление вашей сборки свежим релизом. Для этого нам понадобится настроить студию на компиляцию только тех плагинов, что вы используете в своей сборке. Копируем из директории miranda\bin10 файл miranda32.sln в другое место, переименовываем его в miranda32_mypack.sln и возвращаем в miranda\bin10. Открываем miranda32_mypack.sln и в списке слева делаем по правому клику мыши "Unload" проектам тех плагинов, что не используются в сборке, сохраняем, закрываем студию.
Теперь нужно создать пакетный файл с автоматическим обновлением из SVN, компиляцией, принудительным закрытием работающей Miranda IM и обновлением сборки (в моем случае путь к директории сборки E:\Miranda, отредактируйте в пакетнике в соответствии с вашими данными). Для отмены принудительного закрытия (по желанию) закомментируйте в пакетнике строку "taskkill /F /IM miranda32.exe", вписав перед строкой "::" или "rem" (без кавычек).
Создаем в корне исходников пакетный файл BuildAndUpdateMyPack.bat со следующим содержимым:
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. cd miranda\bin10 :: Переход в директорию "miranda\bin10". if exist "Release Unicode" rd /Q /S "Release Unicode" >nul :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. "%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild_mypack.log /REBUILD "Release Unicode" "miranda32_mypack.sln" :: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32_mypack.sln" как "Release Unicode" и создать файл журнала "rebuild_mypack.log". rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории. taskkill /F /IM miranda32.exe :: Принудительное закрытие процесса "miranda32.exe". xcopy /E /V /Y "Release Unicode\*.*" "E:\MirandaIM" :: Копирование всего содержимого папки "Release Unicode", включая поддиректории, в "E:\MirandaIM" (отредактировать путь) с подавлением запроса подтверждения на перезапись файлов. rd /S /Q "Release Unicode" :: Удаление папки "Release Unicode" со всем содержимым.
Примечания
Для MS VS 2008 Express все вышесказанное верно, за исключением небольших поправок (путь к самой студии и *.sln в исходниках).
Создаем в корне исходников пакетный файл BuildSolution2008.bat со следующим содержимым:
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. cd "miranda\bin9" :: Переход в директорию "miranda\bin9". if exist "Release Unicode" rd /Q /S "Release Unicode" >nul :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. "%VS90COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln" :: Вызов компилятора MS VS 2008 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log". rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории.
В Visual Studio 2010 Professional вместо VCExpress.exe используется devenv.exe.
call SvnUpdate.bat :: Вызов пакетника обновления из SVN. cd miranda\bin10 :: Переход в директорию" miranda\bin10". if exist "Release Unicode" rd /Q /S "Release Unicode" >nul :: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым. "%VS100COMNTOOLS%\..\IDE\devenv.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln" :: Вызов компилятора Visual Studio 2010 Professional, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log". rd /S /Q "Release Unicode\Obj" :: Удаление папки "Obj" со всем содержимым. del /F /S /Q "Release Unicode\*.pdb" :: Удаление файлов дебаг-символов *.pdb, включая поддиректории.
Для желающих подробнее ознакомиться с работой студии из командной строки: Devenv Command Line Switches Visual Studio 2010.