WPSOfficeBuild.dsm
Upload User: dzyhzl
Upload Date: 2019-04-29
Package Size: 56270k
Code Size: 12k
Development Platform:

C/C++

  1. '------------------------------------------------------------------------------
  2. 'DESCRIPTION: BuildProject - 全局变量和常数!
  3. 'NOTE: 
  4. '------------------------------------------------------------------------------
  5. Dim gBuildProject
  6. Dim gLogFile
  7. Dim gInMacroRunning
  8. Const cLogDBF = "logdbf.txt"
  9. Const cAllConfig = "AllConfig.txt"
  10. Const cDebugConfig = "DebugConfig.txt"
  11. Const cReleaseConfig = "ReleaseConfig.txt"
  12. Const cUniDebugConfig = "UniDebugConfig.txt"
  13. Const cUniReleaseConfig = "UniReleaseConfig.txt"
  14. Const cBuildConfigProject = "ZNull"
  15. Const ForReading = 1, ForWriting = 2
  16. Function GetConfigPath
  17. Dim Config_Prj
  18. Dim Config_path
  19. Config_path = ""
  20. For Each Config_Prj in Projects
  21. if Config_Prj.name = cBuildConfigProject then
  22. Config_path = GetProjectDir(Config_Prj.FullName)
  23. exit for
  24. end if
  25. Next
  26. GetConfigPath = Config_path 
  27. End Function
  28. Function GetAllConfigFile
  29. GetAllConfigFile = GetConfigPath() + cAllConfig
  30. End Function
  31. Function GetDebugConfigFile
  32. GetDebugConfigFile = GetConfigPath() + cDebugConfig
  33. End Function
  34. Function GetReleaseConfigFile
  35. GetReleaseConfigFile = GetConfigPath() + cReleaseConfig
  36. End Function
  37. Function GetUniDebugConfigFile
  38. GetUniDebugConfigFile = GetConfigPath() + cUniDebugConfig
  39. End Function
  40. Function GetUniReleaseConfigFile
  41. GetUniReleaseConfigFile = GetConfigPath() + cUniReleaseConfig
  42. End Function
  43. '------------------------------------------------------------------------------
  44. 'DESCRIPTION:  关闭检查日志文件
  45. 'NOTE: 
  46. '------------------------------------------------------------------------------
  47. Sub CloseLogFile(strLogFile)
  48. Dim theDocument
  49. For Each theDocument in Application.Documents
  50. if theDocument.name = strLogFile then
  51. theDocument.Close()
  52. exit for
  53. end if
  54. Next
  55. End Sub
  56. '------------------------------------------------------------------------------
  57. 'DESCRIPTION:  写日志文件函数
  58. 'NOTE: 
  59. '------------------------------------------------------------------------------
  60. Sub StartLog(strLogFile)
  61. Dim fso
  62. Set fso = CreateObject("Scripting.FileSystemObject")
  63. Set gLogFile = fso.OpenTextFile(strLogFile, ForWriting, True)
  64. End Sub
  65. Sub WriteLog(strwrite)
  66. gLogFile.WriteLine strwrite
  67. End Sub
  68. Sub EndLog(bReserved)
  69. gLogFile.Close
  70. ' 如果编译成功,Execute Batch
  71. ExecuteCommand "UserTool8"
  72. End Sub
  73. '------------------------------------------------------------------------------
  74. 'DESCRIPTION:  文件系统函数
  75. 'NOTE: 
  76. '------------------------------------------------------------------------------
  77. Function IsFileExist(filespec)
  78. Dim fso
  79. Set fso = CreateObject("Scripting.FileSystemObject")
  80. IsFileExist = fso.FileExists(filespec)
  81. End Function
  82. Function IsReadOnly(filespec)
  83. Dim fso, f
  84. Set fso = CreateObject("Scripting.FileSystemObject")
  85. Set f = fso.GetFile(filespec)
  86. IsReadOnly = f.Attributes and 1
  87. End Function
  88. '------------------------------------------------------------------------------
  89. 'DESCRIPTION:  其他Utility函数
  90. 'NOTE: 
  91. '------------------------------------------------------------------------------
  92. Function GetProjectDir(FullName)
  93. Dim count
  94. Dim proj_path
  95. Dim full_path
  96. proj_path = Split(StrReverse(FullName),"",-1,1)
  97. count = UBound(proj_path)
  98. full_path = ""
  99. for i = 1 to count 
  100. full_path = full_path & "" & proj_path(i)
  101. next
  102. GetProjectDir = StrReverse(full_path)
  103. End Function
  104. Function ReplaceText(selection, count, incrementby)
  105. Dim str
  106. Dim oldstr
  107. selection.WordRight dsMove, count
  108. selection.WordRight dsExtend, 1
  109. str = selection.Text
  110. oldstr = str
  111. str = str + incrementby
  112. selection.Text = str
  113. ReplaceText = oldstr
  114. End Function
  115. '------------------------------------------------------------------------------
  116. 'DESCRIPTION: 自动增加版本号,写日志文件!!
  117. 'NOTE: Building-Version Auto Increasement
  118. '------------------------------------------------------------------------------
  119. Sub Application_BuildFinish(numError, numWarning)
  120. '(1) 如果在宏中,并且编译失败,写日志文件:
  121. If gInMacroRunning = 1 Then
  122. if numError <> 0 Or numWarning <> 0 Then
  123. WriteLog("    编译错误: " + gBuildProject.Name + " - " + CStr(numError) + " error(s), " + CStr(numWarning) + " warning(s)")
  124. End if
  125. End if
  126. '(2) 如果编译成功,并且VersionNo.h文件存在,并且可写,则增加版本号:
  127. Dim full_path
  128. Dim version
  129. Dim selection
  130. If numError = 0 Then
  131. If gInMacroRunning = 1 Then
  132. full_path = GetProjectDir(gBuildProject.FullName)
  133. Else
  134. full_path = GetProjectDir(ActiveProject.FullName)
  135. End If
  136. full_path = full_path & "VersionNo.h"
  137. If IsFileExist(full_path) <> False Then
  138. If IsReadOnly(full_path) = False Then
  139. 'Open the VersionNo.h file
  140. Documents.Open full_path
  141. 'Increment the version information
  142. set selection = ActiveDocument.Selection
  143. selection.StartOfDocument 
  144. ReplaceText selection, 9, 1
  145. selection.LineDown
  146. selection.StartOfLine
  147. ReplaceText selection, 9, 1
  148. selection.LineDown
  149. selection.StartOfLine
  150. ReplaceText selection, 10, 1
  151. selection.LineDown
  152. selection.StartOfLine
  153. version = ReplaceText(selection, 10, 1)
  154. If gInMacroRunning = 1 Then
  155. WriteLog "    Version - 1.0.0." & version
  156. End If
  157. ActiveDocument.Save
  158. ActiveDocument.Close
  159. End If
  160. End If
  161. End If
  162. End Sub
  163. '------------------------------------------------------------------------------
  164. 'DESCRIPTION: BuildProject - Build某个Configuration
  165. 'NOTE: 
  166. '------------------------------------------------------------------------------
  167. Sub BuildSpecialConfiguration(strConfiguration)
  168. Dim projCol
  169. Dim configCol
  170. Dim numProjects
  171. Dim numConfigs
  172. WriteLog(CStr(Now) + "--------------------Configuration: " + strConfiguration + "--------------------")
  173. set projCol = Projects
  174. numProjects = projCol.Count
  175. For i = 1 To numProjects
  176.    Dim proj
  177.    set proj = projCol(i)
  178.    If proj.Type = "Build" Then
  179.   set configCol = proj.Configurations
  180.   For j = 1 to configCol.Count
  181.  Dim config
  182.  set config = configCol(j)
  183.  If config.Name = strConfiguration Then
  184. set gBuildProject = proj
  185. gInMacroRunning = 1
  186. Build config
  187. gInMacroRunning = 0
  188. exit Sub
  189.  End If
  190.   Next
  191.    End If
  192. Next
  193. WriteLog("    致命错误: 该配置不存在!")
  194. End Sub
  195. '------------------------------------------------------------------------------
  196. 'DESCRIPTION: BuildProject - Rebuild某个Configuration
  197. 'NOTE: 
  198. '------------------------------------------------------------------------------
  199. Sub ReBuildAllSpecialConfiguration(strConfiguration)
  200. Dim projCol
  201. Dim configCol
  202. Dim numProjects
  203. Dim numConfigs
  204. WriteLog(CStr(Now) + "--------------------Configuration: " + strConfiguration + "--------------------")
  205. set projCol = Projects
  206. numProjects = projCol.Count
  207. For i = 1 To numProjects
  208.    Dim proj
  209.    set proj = projCol(i)
  210.    If proj.Type = "Build" Then
  211.   set configCol = proj.Configurations
  212.   For j = 1 to configCol.Count
  213.  Dim config
  214.  set config = configCol(j)
  215.  If config.Name = strConfiguration Then
  216. set gBuildProject = proj
  217. gInMacroRunning = 1
  218. ReBuildAll config
  219. gInMacroRunning = 0
  220. exit Sub
  221.  End If
  222.   Next
  223.    End If
  224. Next
  225. WriteLog("    致命错误: 该配置不存在!")
  226. End Sub
  227. '------------------------------------------------------------------------------
  228. 'DESCRIPTION: BuildProject - Build配置文件(cConfigDBF)中的所有Configuration
  229. 'NOTE: 
  230. '------------------------------------------------------------------------------
  231. Sub BuildAllProduct(cConfigDBF)
  232. If IsFileExist(cConfigDBF) = False Then
  233. exit sub
  234. End If
  235. CloseLogFile(cLogDBF)
  236. Dim fso, ConfigurationFile
  237. Set fso = CreateObject("Scripting.FileSystemObject")
  238. StartLog(cLogDBF)
  239. WriteLog(CStr(Now) + "====================Build All====================")
  240. Set ConfigurationFile = fso.OpenTextFile(cConfigDBF, ForReading)
  241. Dim strConfiguration
  242. Do While ConfigurationFile.AtEndOfLine = False
  243. strConfiguration = ConfigurationFile.ReadLine
  244. If strConfiguration <> "" Then
  245. BuildSpecialConfiguration(strConfiguration)
  246. End If
  247. loop
  248. ConfigurationFile.Close
  249. WriteLog(CStr(Now) + "====================Build All====================")
  250. EndLog(True)
  251. Application.Documents.Open cLogDBF, Auto, TRUE
  252. End Sub
  253. '------------------------------------------------------------------------------
  254. 'DESCRIPTION: BuildProject - Rebuild配置文件(cConfigDBF)中的所有Configuration
  255. 'NOTE: 
  256. '------------------------------------------------------------------------------
  257. Sub ReBuildAllProduct(cConfigDBF)
  258. If IsFileExist(cConfigDBF) = False Then
  259. exit sub
  260. End If
  261. CloseLogFile(cLogDBF)
  262. Dim fso, ConfigurationFile
  263. Set fso = CreateObject("Scripting.FileSystemObject")
  264. StartLog(cLogDBF)
  265. WriteLog(CStr(Now) + "====================Rebuild All====================")
  266. Set ConfigurationFile = fso.OpenTextFile(cConfigDBF, ForReading)
  267. Dim strConfiguration
  268. Do While ConfigurationFile.AtEndOfLine = False
  269. strConfiguration = ConfigurationFile.ReadLine
  270. If strConfiguration <> "" Then
  271. ReBuildAllSpecialConfiguration(strConfiguration)
  272. End If
  273. loop
  274. ConfigurationFile.Close
  275. WriteLog(CStr(Now) + "====================Rebuild All====================")
  276. EndLog(True)
  277. Application.Documents.Open cLogDBF, Auto, TRUE
  278. End Sub
  279. '------------------------------------------------------------------------------
  280. '以下为本文件中各个输出宏:
  281. Sub GenerateConfigFiles
  282. 'DESCRIPTION: 初步建立各种配置文件,当然还需要人为修正,例如由于工程之间依赖关系,编译次序需要适当调整
  283. Dim projCol
  284. Dim configCol
  285. Dim numProjects
  286. Dim numConfigs
  287. Dim fso, fAllConfig, fDebugConfig, fReleaseConfig, fUniDebugConfig, fUniReleaseConfig
  288. Set fso = CreateObject("Scripting.FileSystemObject")
  289. Set fAllConfig = fso.OpenTextFile(GetAllConfigFile(), ForWriting, True)
  290. Set fDebugConfig = fso.OpenTextFile(GetDebugConfigFile(), ForWriting, True)
  291. Set fReleaseConfig = fso.OpenTextFile(GetReleaseConfigFile(), ForWriting, True)
  292. Set fUniDebugConfig = fso.OpenTextFile(GetUniDebugConfigFile(), ForWriting, True)
  293. Set fUniReleaseConfig = fso.OpenTextFile(GetUniReleaseConfigFile(), ForWriting, True)
  294. Set projCol = Projects
  295. numProjects = projCol.Count
  296. For i = 1 To numProjects
  297.    Dim proj
  298.    Set proj = projCol(i)
  299.    If proj.Type = "Build" Then
  300.   set configCol = proj.Configurations
  301.   For j = 1 To configCol.Count
  302.  Dim config
  303.  Set config = configCol(j)
  304.  'AllVersion
  305.  fAllConfig.WriteLine config.Name
  306.  'Debug、非Unicode
  307.  If Instr(config.Name, "Debug") > 0 And InStr(config.Name, "Unicode") <= 0 Then
  308. fDebugConfig.WriteLine config.Name
  309.  'Release、非Unicode
  310.  ElseIf Instr(config.Name, "Release") > 0 And InStr(config.Name, "Unicode") <= 0 Then
  311. fReleaseConfig.WriteLine config.Name
  312.  'Debug、Unicode
  313.  ElseIf Instr(config.Name, "Debug") > 0 And InStr(config.Name, "Unicode") > 0 Then
  314. fUniDebugConfig.WriteLine config.Name
  315.  'Release、Unicode
  316.  ElseIf Instr(config.Name, "Release") > 0 And InStr(config.Name, "Unicode") > 0 Then
  317. fUniReleaseConfig.WriteLine config.Name
  318.  End If
  319.   Next
  320.    End If
  321. Next
  322. End Sub
  323. Sub BuildAllVersion
  324. 'DESCRIPTION: BuildProject - Build 所有版本
  325. BuildAllProduct(GetAllConfigFile())
  326. End Sub
  327. Sub RebuildAllVersion
  328. 'DESCRIPTION: BuildProject - Rebuild 所有版本
  329. ReBuildAllProduct(GetAllConfigFile())
  330. End Sub
  331. Sub BuildDebugVersion
  332. 'DESCRIPTION: BuildProject - Build Debug、非Unicode版本
  333. BuildAllProduct(GetDebugConfigFile())
  334. End Sub
  335. Sub RebuildDebugVersion
  336. 'DESCRIPTION: BuildProject - Rebuild Debug、非Unicode版本
  337. ReBuildAllProduct(GetDebugConfigFile())
  338. End Sub
  339. Sub BuildReleaseVersion
  340. 'DESCRIPTION: BuildProject - Build Release、非Unicode版本
  341. BuildAllProduct(GetReleaseConfigFile())
  342. End Sub
  343. Sub RebuildReleaseVersion
  344. 'DESCRIPTION: BuildProject - Rebuild Release、非Unicode版本
  345. ReBuildAllProduct(GetReleaseConfigFile())
  346. End Sub
  347. Sub BuildUniDebugVersion
  348. 'DESCRIPTION: BuildProject - Build Debug、Unicode版本
  349. BuildAllProduct(GetUniDebugConfigFile())
  350. End Sub
  351. Sub RebuildUniDebugVersion
  352. 'DESCRIPTION: BuildProject - Rebuild Debug、Unicode版本
  353. ReBuildAllProduct(GetUniDebugConfigFile())
  354. End Sub
  355. Sub BuildUniReleaseVersion
  356. 'DESCRIPTION: BuildProject - Build Release、Unicode版本
  357. BuildAllProduct(GetUniReleaseConfigFile())
  358. End Sub
  359. Sub RebuildUniReleaseVersion
  360. 'DESCRIPTION: BuildProject - Rebuild Release、Unicode版本
  361. ReBuildAllProduct(GetUniReleaseConfigFile())
  362. End Sub