[分享]PY的Boost自动编译程序 1.1 根据环境自动编译
Python写的Boost自动编译程序 1.1
改进:
根据自己的环境筛选出已安装环境,并列出 环境提供选择。
支持X64位的自动参数编译。
可以选择编译的参数,其他版本持续改进中
自动编译自动安装到指定目录(需要自己改PY代码)
有需要改进的请继续,自行修改,修改请保留作者版权。
已测试过 WIN10下自动编译B2和编译VS2010版BOOST 1.61
目前仅支持VS2010以及未来版本,仅支持BOOST 1.53以上版本
源码:
- # Code by koangel
- # EMail: jackliu100@gmail.com
- # version : 1.1 beta
- # boost 全自动编译工具,仅用于WIN32编译 #
- import os
- import sys
- import string
- import signal
- import platform
- import time
- reload(sys)
- # 全局变量设置 #
- # boost的源码路径
- boost_work_path = "E:/boost/boost_1_61_0"
- # build log文件名
- build_log_file_name = "build_log.txt"
- # 启动环境变量输出
- is_write_evn_log = False
- # 原始目录
- temp_old_path = ""
- ISOTIMEFORMAT='%Y-%m-%d %X'
- # vc环境
- g_vs_env_data = [
- # env , vc ver
- ["VS100COMNTOOLS","VC100","Visual Studio 2010",False,"Microsoft Visual Studio 10.0","10.0"],
- ["VS110COMNTOOLS","VC110","Visual Studio 2012",False,"Microsoft Visual Studio 11.0","11.0"],
- ["VS120COMNTOOLS","VC120","Visual Studio 2013",False,"Microsoft Visual Studio 12.0","12.0"],
- ["VS140COMNTOOLS","VC140","Visual Studio 2015",False,"Microsoft Visual Studio 14.0","14.0"],
- ["VS150COMNTOOLS","VC150","Visual Studio 2016",False,"Microsoft Visual Studio 15.0","15.0"],
- ]
- vaild_vs_num = 0
- VERSION_KEY = 'VISUALSTUDIOVERSION'
- # boost编译选项 ,请在此处调整
- # 输出目录
- build_install_path = "E:/boost/boost_1_61_0"
- # 构建32位还是64位
- build_is_x64 = True
- # 线程模式(不建议修改 ,保持默认)
- build_threading_link = "multi"
- # 链接模式
- build_is_shared_link = False
- # 运行库链接模式
- build_is_shared_runtime = False
- # 编译模式(不建议调试)
- build_variant = "debug,release"
- # 某些特殊编译模式
- build_is_with_python = False
- build_is_with_MPI = False
- def getLogPath():
- return boost_work_path + "/" + build_log_file_name
- # 写出函数
- def logtofile(str):
- type = sys.getfilesystemencoding()
- timeStr = time.strftime(ISOTIMEFORMAT,time.localtime(time.time()))
- print("["+ timeStr + "] " +str.decode('utf-8').encode(type))
- os.system("echo " + "["+ timeStr + "] " + str.decode('utf-8').encode(type) + " >> " + getLogPath())
- def build_b2_tools( toPath ):
- logtofile("正在构建B2工具集,请耐心等待....")
- os.system(toPath + " & bootstrap.bat >> " + getLogPath() )
- logtofile("构建B2工具集完成...")
- def check_compiler_env() :
- logtofile("开始检测VS环境是否有效...")
- isFindVC = False
- vaild_vs_num = 0
- for vi in g_vs_env_data:
- if os.environ.has_key(vi[0]) :
- logtofile(" 环境:" + vi[2] + " 有效...")
- vi[3] = True
- vaild_vs_num = vaild_vs_num+1
- else:
- logtofile(" 环境:" +vi[2] + " 无效...")
- isFindVC = True
- return isFindVC
- def write_env_data():
- if is_write_evn_log :
- logtofile("输出全部环境变量:")
- for ev in os.environ.data:
- logtofile("环境变量:" + str(ev) + " data:" + os.environ[ev])
- def main():
- print("===========================================================================")
- print(" Boost Auto Build Tools for Windows Version 1.1 beta")
- print(" Code by Koangel , Using Python 2.7 ")
- print(" weibo: http:\\www.weibo.com/koangel")
- print(" Visual Studio for vs2010 or newer ")
- print(" Boost for boost 1.53 or newer ")
- print("===========================================================================")
- sys.setdefaultencoding('gbk')
- #os.remove(getLogPath())
- logtofile("检测是否为WINDOWS...")
- if (os.name != 'nt'):
- logtofile("非WINDOWS环境,无法运行...")
- return
- write_env_data()
- # 检查编译环境
- logtofile("检测是否安装VS环境....")
- if (check_compiler_env() == False) :
- logtofile("未安装VS环境无法继续...")
- return
- logtofile("请选择X86 or X64:( 1、x86 2、x64 )...")
- addrMode = int(raw_input("Select:"))
- if addrMode == '' or addrMode == 1:
- build_is_x64 = False
- elif addrMode == '' or addrMode == 2:
- build_is_x64 = True
- else:
- logtofile("选择错误,请重新运行...")
- return
- logtofile("请选择Runtime模式:( 1、Shared Runtime 2、Static Runtime )...")
- smode = int(raw_input("Select:"))
- if smode == 1:
- build_is_shared_runtime = True
- else:
- build_is_shared_runtime = False
- logtofile("请选择Link模式:( 1、Shared 2、Static )...")
- smode = int(raw_input("Select:"))
- if smode == 1:
- build_is_shared_link = True
- else:
- build_is_shared_link = False
- nVSIDX = 1
- logtofile("请选择一个您需要的编译器版本:")
- gvslist = []
- for vevi in g_vs_env_data:
- if vevi[3] :
- logtofile(" " + str(nVSIDX) + "、" + vevi[4] + "。")
- gvslist.append(vevi)
- nVSIDX += 1
- vsSel = int(raw_input("Select:"))
- if vsSel < 0 or vsSel > len(gvslist):
- logtofile("无效的选项,超出选项索引...")
- return
- # 运行关键内容
- targetVSEnv = gvslist[vsSel-1]
- logtofile("选择编译环境:" + targetVSEnv[4])
- toPath = 'call \"'+os.environ[targetVSEnv[0]] + '..\\..\\VC\\vcvarsall.bat\"'
- if build_is_x64:
- toPath += " x86_amd64"
- else:
- toPath += " x86"
- #os.system(toPath)
- temp_old_path = os.path
- # 进入BOOST目录
- logtofile("跳转进入工作目录...")
- os.chdir(boost_work_path);
- #if (os.environ.has_key(VERSION_KEY) == False) :
- # logtofile("未检测到VS环境,自动输出使用方法:")
- # logtofile(" 首先使用指定版本的VC工具性运行命令行,具体方法为打开,请尽量使用x86_x64兼容命令行。")
- # logtofile(" 以VS2010为例:从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2010”,指向“Visual Studio tools(工具)”,然后单击“Visual Studio 2010 command prompt(命令提示)”")
- # logtofile(" 之后运行本Python程序即可,Coding by koangel。")
- # return
- toVersion = targetVSEnv[5] #str(os.environ[VERSION_KEY])
- # 写出选项
- logtofile("检测B2工具集....")
- if (os.access("b2.exe",os.F_OK) == False) :
- build_b2_tools(toPath)
- # X86 还是 X64选项
- cpuMode = ""
- if build_is_x64:
- cpuMode = ""
- logtofile("检测并构建编译命令...")
- boost_cmd = "b2 --toolset=msvc-" + toVersion.strip()
- if (build_is_with_python == False ):
- boost_cmd += " --without-python"
- if (build_is_with_MPI == False ):
- boost_cmd += " --without-mpi"
- boost_cmd += " threading=" + build_threading_link
- boost_cmd += " link="
- if build_is_shared_link:
- boost_cmd += "shared"
- else:
- boost_cmd += "static"
- boost_cmd += " runtime-link="
- if build_is_shared_runtime:
- boost_cmd += "shared"
- else:
- boost_cmd += "static"
- boost_cmd += " variant=" + build_variant
- if build_is_x64:
- boost_cmd += " address-model="+cpuMode
- boost_cmd += ' --prefix="' + build_install_path + '"'
- if build_is_x64 :
- boost_cmd += ' --stagedir=".\\bin\\x64"'
- logtofile("生成指令:" + boost_cmd)
- # 开始编译
- #logtofile( toPath + ' & ' + boost_cmd )
- os.system( toPath + ' & ' + boost_cmd )
- # 生成完毕
- logtofile("生成BOOST完成,请检查是否存在具体错误。")
- # 开始安装
- logtofile("开始安装BOOST...")
- if build_is_x64 == False:
- os.system(boost_cmd + " install")
- # ################################################################################
- # =========================
- # 入口函数
- # =========================
- if __name__ == '__main__':
- main()
[分享]PY的Boost自动编译程序 1.1 根据环境自动编译的更多相关文章
- windows下用vs2008和boost结合编译程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://co63oc.blog.51cto.com/904636/504469 win ...
- Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)
标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...
- Maven 整合 spring profile实现多环境自动切换
Maven 整合 spring profile实现多环境自动切换 时间:2014-03-19 15:32来源:Internet 作者:Internet 点击:525次 profile主要用在项目多环境 ...
- 简进祥-SVN版本控制方案:多分支并行开发,多环境自动部署
两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkins自动化部署工具 用jenkins部署的方案 jenkins 测试环境:配置了各个分支的svn 地 ...
- svn版本控制方案:多分支并行开发,多环境自动部署
背景 keywords:svn,trunk,branch,jenkins,maven,merge 两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkin ...
- win10彻底禁用自动更新,win10怎样彻底关闭自动更新,永久关闭win10自动更新,win10更新助手
首先,请广大win10受害者原谅小菜用一个如此长的标题来吸引你们,为了尽最大努力帮助那些饱受win10自动更新折磨的朋友们,小菜不得已出此下策,望见谅! windows 10是一个神奇的操作系统,当你 ...
- EF的CodeFirst模式自动迁移(适用于开发环境)
EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...
- JPA中自动使用@Table(name = "userTab")后自动将表名、列名添加了下划线的问题
一.问题 JPA中自动使用@Table(name = "userTab")后自动将表名.列名添加了下划线的问题,如下图: 二.解决 在application.properties文 ...
- mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置
mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置 ============================== 蕃薯耀 2018年3月14 ...
随机推荐
- FastAdmin bootstrap-table 分页手动输入跳转
FastAdmin bootstrap-table 分页手动输入跳转 Bootstrap-Table (V1.11.0)默认是没有这个功能的,不过作者有写的扩展. https://github.com ...
- 生成.eps文件方法
生成.eps文件方法 背景: 要写论文了,图像的分辨率是一大痛点 方法一: 两步生成.eps文件 用visio 制作图形,保存为pdf格式: 直接用adobe acrobat 打开pdf,然后保存为. ...
- php non-thread-safe和thread-safe这两个版本有何区别?
php non-thread-safe和thread-safe这两个版本有何区别? non-thread-safe 非线程安全 与IIS 搭配环境thread-safe 线程安全 与apache 搭配 ...
- brave-zipkin的日志源码分析
其实在zipkin的日志里面作为发送端日志两个,sr,ss,这个日志是servlet产生的:接收端日志是四个,分别是cr,sr,ss,cs:cr和cs分别是上游的日志的信息:ss和sr是接收端输出的日 ...
- 【linux】用户与组
一.用户和组的基本概念 1.用户 用户:用于获取计算机资源或服务的标识符,比如用户名.计算机处理的是UID, ...
- 【转】java内存分配和String类型的深度解析
一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...
- Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台)
ylbtech-Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台) 机器学习平台 一站式可视化机器学习 https://pai.cloud.ali ...
- linux Valgrind使用说明-内存泄漏
Valgrind使用说明 Valgrind manual: http://valgrind.org/docs/manual/manual.html valgrind的介绍.安装和使用 valgrind ...
- python mysql模块
多次使用python操作mysql数据库,先与大家分享一下,关于如何使用python操作mysql数据库.mysql并不是python自带的模块,因此需要下载安装.(在windows平台下介绍该使用过 ...
- ACM刷题踩坑记录
2017-12-26: 1.再次被写法坑了好长一会,调了半天的bug,还是没找出来.最后,发现,又坑在这个小细节上了.这样子写,第一个if和第三个else在一次循环中都会执行,然后,就GG了. 要注意 ...