2010年7月20日 星期二

專案自動化建置(先叫這個名字)

這是我轉寫的批次檔
主要功能是將Qt的專案編譯成執行檔
再轉成安裝程式(unicode nsis)
最後上傳到伺服器

資料夾說明
code放qt的專案和程式碼
bin編譯完成後的執行檔和obj file
resource執行時需要的圖檔或文字檔
install-win安裝程式原始碼和檔案
CD-win光碟檔

下面是批次檔
rem 移除一些不需要的檔案(win和mac以及qt的暫存檔)
del .* /a/s/f/q
del Thumbs.db /a/s/f/q
del *.o /a/s/f/q
del *.db /a/s/f/q
del *.DS_Store /a/s/f/q
del *.pro.user /a/s/f/q
del Makefile /a/s/f/q
del *.Debug /a/s/f/q
del *.bak /a/s/f/q
del *.Release /a/s/f/q
del moc_*.cpp /a/s/f/q
rem 移除執行檔(因為要重新編譯)
rd bin /s /Q

rem 建立版本(利用日期),分別放到version.h和version.nsi,這樣執行檔和安裝程式就有相同的版本
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set date=%%a-%%b-%%c)
echo #define VERSION "%date%">Code/version.h
echo !define SOURCE_FILE_VERSION "%date%">install-win\version.nsi

rem 編譯qt專案成執行檔
call C:\Qt\2010.04\bin\qtenv.bat
cd Code
qmake
mingw32-make release
cd ..

rem 建立安裝檔,先將光碟檔移除(因為將重新編譯)
rd CD-win /s /Q
rem 將執行檔需要的檔案複製到file
xcopy install-win\File-template\*.* install-win\File\ /Y /S
XCOPY Resource\*.* install-win\File\ /Y
COPY "bin\release\MySoftWare\MySoftWare.exe" "install-win\File\MySoftWare.exe"
rem 將光碟需要的檔案複製到CD-win
XCOPY install-win\CD-template\*.* CD-win\ /Y /S
rem 編譯安裝檔(請自行尋找nsis),產生setup.exe
call "C:\Program Files\NSIS\Unicode\makensis.exe" "install-win\setup.nsi"
rem 移除File(因為安裝檔已經產生)
rd install-win\File /s /Q
COPY "install-win\setup.exe" "CD-win\setup.exe"

rem 上傳到伺服器
cd install-win
rem 壓縮安裝檔成zip(zip.exe是利用info-zip)
zip setup.zip setup.exe
cd..
set FTPActions=00000000000000.FTP
echo open your.web.ip>>%FTPActions%
echo namen>>%FTPActions%
echo password>>%FTPActions%
echo cd /web.com/download/MySoftWare>>%FTPActions%
echo mkdir %date%>>%FTPActions%
echo cd %date%>>%FTPActions%
echo bin>>%FTPActions%
echo send install-win\setup.zip setup.zip>>%FTPActions%
echo bye>>%FTPActions%
ftp -s:%FTPActions%
del %FTPActions%

rem 利用php解壓縮
start http://www.web.com/download/MySoftWare/unzip.php?path=%date%

pause


下面這一段式是unzip.php
<?php
$zip = zip_open($path."/setup.zip");
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$fp = fopen($path."/".zip_entry_name($zip_entry), "w");
if (zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,"$buf");
zip_entry_close($zip_entry);
fclose($fp);
}
}
zip_close($zip);
echo ‘ok’;
} else {
echo ‘failed’;
}
?>