Python写的Boost自动编译程序 1.1

改进:

根据自己的环境筛选出已安装环境,并列出 环境提供选择。

支持X64位的自动参数编译。

可以选择编译的参数,其他版本持续改进中

自动编译自动安装到指定目录(需要自己改PY代码)

有需要改进的请继续,自行修改,修改请保留作者版权。

已测试过 WIN10下自动编译B2和编译VS2010版BOOST 1.61

目前仅支持VS2010以及未来版本,仅支持BOOST 1.53以上版本

源码:

  1. # Code by koangel
  2. # EMail: jackliu100@gmail.com
  3. # version : 1.1 beta
  4. # boost 全自动编译工具,仅用于WIN32编译 #
  5. import os
  6. import sys
  7. import string
  8. import signal
  9. import platform
  10. import time
  11.  
  12. reload(sys)
  13.  
  14. # 全局变量设置 #
  15. # boost的源码路径
  16. boost_work_path = "E:/boost/boost_1_61_0"
  17.  
  18. # build log文件名
  19. build_log_file_name = "build_log.txt"
  20.  
  21. # 启动环境变量输出
  22. is_write_evn_log = False
  23.  
  24. # 原始目录
  25. temp_old_path = ""
  26.  
  27. ISOTIMEFORMAT='%Y-%m-%d %X'
  28. # vc环境
  29. g_vs_env_data = [
  30. # env , vc ver
  31. ["VS100COMNTOOLS","VC100","Visual Studio 2010",False,"Microsoft Visual Studio 10.0","10.0"],
  32. ["VS110COMNTOOLS","VC110","Visual Studio 2012",False,"Microsoft Visual Studio 11.0","11.0"],
  33. ["VS120COMNTOOLS","VC120","Visual Studio 2013",False,"Microsoft Visual Studio 12.0","12.0"],
  34. ["VS140COMNTOOLS","VC140","Visual Studio 2015",False,"Microsoft Visual Studio 14.0","14.0"],
  35. ["VS150COMNTOOLS","VC150","Visual Studio 2016",False,"Microsoft Visual Studio 15.0","15.0"],
  36. ]
  37.  
  38. vaild_vs_num = 0
  39.  
  40. VERSION_KEY = 'VISUALSTUDIOVERSION'
  41.  
  42. # boost编译选项 ,请在此处调整
  43. # 输出目录
  44. build_install_path = "E:/boost/boost_1_61_0"
  45. # 构建32位还是64位
  46. build_is_x64 = True
  47. # 线程模式(不建议修改 ,保持默认)
  48. build_threading_link = "multi"
  49. # 链接模式
  50. build_is_shared_link = False
  51. # 运行库链接模式
  52. build_is_shared_runtime = False
  53. # 编译模式(不建议调试)
  54. build_variant = "debug,release"
  55. # 某些特殊编译模式
  56. build_is_with_python = False
  57. build_is_with_MPI = False
  58.  
  59. def getLogPath():
  60. return boost_work_path + "/" + build_log_file_name
  61.  
  62. # 写出函数
  63. def logtofile(str):
  64. type = sys.getfilesystemencoding()
  65. timeStr = time.strftime(ISOTIMEFORMAT,time.localtime(time.time()))
  66. print("["+ timeStr + "] " +str.decode('utf-8').encode(type))
  67. os.system("echo " + "["+ timeStr + "] " + str.decode('utf-8').encode(type) + " >> " + getLogPath())
  68.  
  69. def build_b2_tools( toPath ):
  70. logtofile("正在构建B2工具集,请耐心等待....")
  71. os.system(toPath + " & bootstrap.bat >> " + getLogPath() )
  72. logtofile("构建B2工具集完成...")
  73.  
  74. def check_compiler_env() :
  75. logtofile("开始检测VS环境是否有效...")
  76. isFindVC = False
  77. vaild_vs_num = 0
  78. for vi in g_vs_env_data:
  79. if os.environ.has_key(vi[0]) :
  80. logtofile(" 环境:" + vi[2] + " 有效...")
  81. vi[3] = True
  82. vaild_vs_num = vaild_vs_num+1
  83. else:
  84. logtofile(" 环境:" +vi[2] + " 无效...")
  85. isFindVC = True
  86.  
  87. return isFindVC
  88.  
  89. def write_env_data():
  90. if is_write_evn_log :
  91. logtofile("输出全部环境变量:")
  92. for ev in os.environ.data:
  93. logtofile("环境变量:" + str(ev) + " data:" + os.environ[ev])
  94.  
  95. def main():
  96. print("===========================================================================")
  97. print(" Boost Auto Build Tools for Windows Version 1.1 beta")
  98. print(" Code by Koangel , Using Python 2.7 ")
  99. print(" weibo: http:\\www.weibo.com/koangel")
  100. print(" Visual Studio for vs2010 or newer ")
  101. print(" Boost for boost 1.53 or newer ")
  102. print("===========================================================================")
  103.  
  104. sys.setdefaultencoding('gbk')
  105. #os.remove(getLogPath())
  106. logtofile("检测是否为WINDOWS...")
  107. if (os.name != 'nt'):
  108. logtofile("非WINDOWS环境,无法运行...")
  109. return
  110.  
  111. write_env_data()
  112.  
  113. # 检查编译环境
  114. logtofile("检测是否安装VS环境....")
  115. if (check_compiler_env() == False) :
  116. logtofile("未安装VS环境无法继续...")
  117. return
  118.  
  119. logtofile("请选择X86 or X64:( 1、x86 2、x64 )...")
  120. addrMode = int(raw_input("Select:"))
  121. if addrMode == '' or addrMode == 1:
  122. build_is_x64 = False
  123. elif addrMode == '' or addrMode == 2:
  124. build_is_x64 = True
  125. else:
  126. logtofile("选择错误,请重新运行...")
  127. return
  128.  
  129. logtofile("请选择Runtime模式:( 1、Shared Runtime 2、Static Runtime )...")
  130. smode = int(raw_input("Select:"))
  131. if smode == 1:
  132. build_is_shared_runtime = True
  133. else:
  134. build_is_shared_runtime = False
  135.  
  136. logtofile("请选择Link模式:( 1、Shared 2、Static )...")
  137. smode = int(raw_input("Select:"))
  138. if smode == 1:
  139. build_is_shared_link = True
  140. else:
  141. build_is_shared_link = False
  142.  
  143. nVSIDX = 1
  144. logtofile("请选择一个您需要的编译器版本:")
  145.  
  146. gvslist = []
  147. for vevi in g_vs_env_data:
  148. if vevi[3] :
  149. logtofile(" " + str(nVSIDX) + "、" + vevi[4] + "。")
  150. gvslist.append(vevi)
  151. nVSIDX += 1
  152.  
  153. vsSel = int(raw_input("Select:"))
  154. if vsSel < 0 or vsSel > len(gvslist):
  155. logtofile("无效的选项,超出选项索引...")
  156. return
  157.  
  158. # 运行关键内容
  159. targetVSEnv = gvslist[vsSel-1]
  160. logtofile("选择编译环境:" + targetVSEnv[4])
  161.  
  162. toPath = 'call \"'+os.environ[targetVSEnv[0]] + '..\\..\\VC\\vcvarsall.bat\"'
  163.  
  164. if build_is_x64:
  165. toPath += " x86_amd64"
  166. else:
  167. toPath += " x86"
  168.  
  169. #os.system(toPath)
  170.  
  171. temp_old_path = os.path
  172. # 进入BOOST目录
  173. logtofile("跳转进入工作目录...")
  174. os.chdir(boost_work_path);
  175.  
  176. #if (os.environ.has_key(VERSION_KEY) == False) :
  177. # logtofile("未检测到VS环境,自动输出使用方法:")
  178. # logtofile(" 首先使用指定版本的VC工具性运行命令行,具体方法为打开,请尽量使用x86_x64兼容命令行。")
  179. # logtofile(" 以VS2010为例:从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2010”,指向“Visual Studio tools(工具)”,然后单击“Visual Studio 2010 command prompt(命令提示)”")
  180. # logtofile(" 之后运行本Python程序即可,Coding by koangel。")
  181. # return
  182.  
  183. toVersion = targetVSEnv[5] #str(os.environ[VERSION_KEY])
  184.  
  185. # 写出选项
  186. logtofile("检测B2工具集....")
  187. if (os.access("b2.exe",os.F_OK) == False) :
  188. build_b2_tools(toPath)
  189.  
  190. # X86 还是 X64选项
  191. cpuMode = ""
  192. if build_is_x64:
  193. cpuMode = ""
  194.  
  195. logtofile("检测并构建编译命令...")
  196. boost_cmd = "b2 --toolset=msvc-" + toVersion.strip()
  197. if (build_is_with_python == False ):
  198. boost_cmd += " --without-python"
  199.  
  200. if (build_is_with_MPI == False ):
  201. boost_cmd += " --without-mpi"
  202.  
  203. boost_cmd += " threading=" + build_threading_link
  204. boost_cmd += " link="
  205. if build_is_shared_link:
  206. boost_cmd += "shared"
  207. else:
  208. boost_cmd += "static"
  209.  
  210. boost_cmd += " runtime-link="
  211. if build_is_shared_runtime:
  212. boost_cmd += "shared"
  213. else:
  214. boost_cmd += "static"
  215.  
  216. boost_cmd += " variant=" + build_variant
  217.  
  218. if build_is_x64:
  219. boost_cmd += " address-model="+cpuMode
  220.  
  221. boost_cmd += ' --prefix="' + build_install_path + '"'
  222.  
  223. if build_is_x64 :
  224. boost_cmd += ' --stagedir=".\\bin\\x64"'
  225.  
  226. logtofile("生成指令:" + boost_cmd)
  227.  
  228. # 开始编译
  229. #logtofile( toPath + ' & ' + boost_cmd )
  230. os.system( toPath + ' & ' + boost_cmd )
  231.  
  232. # 生成完毕
  233. logtofile("生成BOOST完成,请检查是否存在具体错误。")
  234.  
  235. # 开始安装
  236. logtofile("开始安装BOOST...")
  237. if build_is_x64 == False:
  238. os.system(boost_cmd + " install")
  239.  
  240. # ################################################################################
  241. # =========================
  242. # 入口函数
  243. # =========================
  244. if __name__ == '__main__':
  245. main()

[分享]PY的Boost自动编译程序 1.1 根据环境自动编译的更多相关文章

  1. windows下用vs2008和boost结合编译程序

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://co63oc.blog.51cto.com/904636/504469 win ...

  2. Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  3. Maven 整合 spring profile实现多环境自动切换

    Maven 整合 spring profile实现多环境自动切换 时间:2014-03-19 15:32来源:Internet 作者:Internet 点击:525次 profile主要用在项目多环境 ...

  4. 简进祥-SVN版本控制方案:多分支并行开发,多环境自动部署

    两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkins自动化部署工具 用jenkins部署的方案 jenkins 测试环境:配置了各个分支的svn 地 ...

  5. svn版本控制方案:多分支并行开发,多环境自动部署

    背景 keywords:svn,trunk,branch,jenkins,maven,merge 两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkin ...

  6. win10彻底禁用自动更新,win10怎样彻底关闭自动更新,永久关闭win10自动更新,win10更新助手

    首先,请广大win10受害者原谅小菜用一个如此长的标题来吸引你们,为了尽最大努力帮助那些饱受win10自动更新折磨的朋友们,小菜不得已出此下策,望见谅! windows 10是一个神奇的操作系统,当你 ...

  7. EF的CodeFirst模式自动迁移(适用于开发环境)

    EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...

  8. JPA中自动使用@Table(name = "userTab")后自动将表名、列名添加了下划线的问题

    一.问题 JPA中自动使用@Table(name = "userTab")后自动将表名.列名添加了下划线的问题,如下图: 二.解决 在application.properties文 ...

  9. mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置

    mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置 ============================== 蕃薯耀 2018年3月14 ...

随机推荐

  1. FastAdmin bootstrap-table 分页手动输入跳转

    FastAdmin bootstrap-table 分页手动输入跳转 Bootstrap-Table (V1.11.0)默认是没有这个功能的,不过作者有写的扩展. https://github.com ...

  2. 生成.eps文件方法

    生成.eps文件方法 背景: 要写论文了,图像的分辨率是一大痛点 方法一: 两步生成.eps文件 用visio 制作图形,保存为pdf格式: 直接用adobe acrobat 打开pdf,然后保存为. ...

  3. php non-thread-safe和thread-safe这两个版本有何区别?

    php non-thread-safe和thread-safe这两个版本有何区别? non-thread-safe 非线程安全 与IIS 搭配环境thread-safe 线程安全 与apache 搭配 ...

  4. brave-zipkin的日志源码分析

    其实在zipkin的日志里面作为发送端日志两个,sr,ss,这个日志是servlet产生的:接收端日志是四个,分别是cr,sr,ss,cs:cr和cs分别是上游的日志的信息:ss和sr是接收端输出的日 ...

  5. 【linux】用户与组

    一.用户和组的基本概念                                               1.用户 用户:用于获取计算机资源或服务的标识符,比如用户名.计算机处理的是UID, ...

  6. 【转】java内存分配和String类型的深度解析

    一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...

  7. Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台)

    ylbtech-Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台) 机器学习平台 一站式可视化机器学习 https://pai.cloud.ali ...

  8. linux Valgrind使用说明-内存泄漏

    Valgrind使用说明 Valgrind manual: http://valgrind.org/docs/manual/manual.html valgrind的介绍.安装和使用 valgrind ...

  9. python mysql模块

    多次使用python操作mysql数据库,先与大家分享一下,关于如何使用python操作mysql数据库.mysql并不是python自带的模块,因此需要下载安装.(在windows平台下介绍该使用过 ...

  10. ACM刷题踩坑记录

    2017-12-26: 1.再次被写法坑了好长一会,调了半天的bug,还是没找出来.最后,发现,又坑在这个小细节上了.这样子写,第一个if和第三个else在一次循环中都会执行,然后,就GG了. 要注意 ...