本程序WINDOWS专用,只做抛砖引玉,希望诸位按照各自需求自行修改,主要目的是为了让诸位编译时可以省一些组合指令的时间,只需要修改几个参数即可自动编译。

支持64位编译模式。

改进版本:http://www.cnblogs.com/koangel/p/5673827.html

本程序只是1.0版本,可能不是特别完善,主要是针对我在编译WIN32 BOOST时候的一些需求,已测试过BOOST 1.61。

 # 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"],
["VS110COMNTOOLS","VC110","Visual Studio 2012",False,"Microsoft Visual Studio 11.0"],
["VS120COMNTOOLS","VC120","Visual Studio 2013",False,"Microsoft Visual Studio 12.0"],
["VS140COMNTOOLS","VC140","Visual Studio 2015",False,"Microsoft Visual Studio 14.0"],
["VS150COMNTOOLS","VC150","Visual Studio 2016",False,"Microsoft Visual Studio 15.0"],
] vaild_vs_num = 0 VERSION_KEY = 'VISUALSTUDIOVERSION' # boost编译选项 ,请在此处调整
# 输出目录
build_install_path = "E:/boost/boost_1_61_0"
# 构建32位还是64位
build_is_x64 = False
# 线程模式(不建议修改 ,保持默认)
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():
logtofile("正在构建B2工具集,请耐心等待....")
os.system("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.0 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() temp_old_path = os.path
# 进入BOOST目录
logtofile("跳转进入工作目录...")
os.chdir(boost_work_path); # 检查编译环境
logtofile("检测是否安装VS环境....")
if (check_compiler_env() == False) :
logtofile("未安装VS环境无法继续...")
return 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 = str(os.environ[VERSION_KEY]) # 写出选项
logtofile("检测B2工具集....")
if (os.access("b2.exe",os.F_OK) == False) :
build_b2_tools() # 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
boost_cmd += " --address-model="+cpuMode boost_cmd += ' --prefix="' + build_install_path + '"' if build_is_x64 :
boost_cmd += ' --stagedir=".\bin\x64"' logtofile("生成指令:" + boost_cmd) # 开始编译
os.system(boost_cmd) # 生成完毕
logtofile("生成BOOST完成,请检查是否存在具体错误。") # 开始安装
logtofile("开始安装BOOST...")
os.system(boost_cmd + " install") # ################################################################################
# =========================
# 入口函数
# =========================
if __name__ == '__main__':
main()

[原创]分享本人自己PY写的BOOST编译程序(源码)的更多相关文章

  1. 分享一个与ABP配套使用的代码生成器源码

    点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...

  2. 分享一个难得的YiBo微博客户端应用源码Android版

    今天给大家分享一款,YiBo微博客户端应用源码,这是一款专为Android用户打造的聚合型微博客户端,完美支持新浪微博.腾讯微博.搜狐微博.网易微博和饭否五个微博平台,界面清爽,使用简单轻巧,支持多账 ...

  3. boost.asio源码阅读(2) - task_io_service

    1.0 task_io_service 在boost.asio源码阅读(1)中,代码已经查看到task_io_service中. 具体的操作调用void task_io_service::init_t ...

  4. CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化 ...

  5. [转帖]CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装

    CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装 本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuir ...

  6. [原创]Net实现Excel导入导出到数据库(附源码)

    关于数据库导出到Excel和SQLServer数据导出到Excel的例子,在博客园有很多的例子,自己根据网上搜集资料,自己做了亦歌简单的demo,现在分享出来供初学者学习交流使用. 一.数据库导入导出 ...

  7. 分享一个公众号h5裂变吸粉源码工具

    这次我是分享我本人制作的一个恶搞程序,说白了就是一个公众号裂变吸粉工具,市面上有很多引流方法,例如最常见的就是色流,哈哈,今天我跟大家分享的方法是有趣的,好玩的,恶搞的.这个程序上线一天已经收获了61 ...

  8. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  9. boost.asio源码剖析(一) ---- 前 言

    * 前言 源码之前,了无秘密.                                                       ——侯捷 Boost库是一个可移植.提供源代码的C++库,作 ...

随机推荐

  1. 提高ASP.NET页面载入速度的方法

    前言 本文是我对ASP.NET页面载入速度提高的一些做法,这些做法分为以下部分: 目录 1.采用 HTTP Module 控制页面的生命周期. 2.自定义Response.Filter得到输出流str ...

  2. 使用ntp从时间同步服务器更新centos系统时间的方法

    CentOS系统时间同步的步骤如下: 复制代码 代码如下: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimentpdate us.pool.ntp ...

  3. Oracle 表空间查询与操作方法

    一.查询篇 1.查询oracle表空间的使用情况 select b.file_id 文件ID,  b.tablespace_name 表空间,  b.file_name 物理文件名,  b.bytes ...

  4. 如何判断两个IP地址是不是在同一个网段

     要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网. 例:假定选择了子网掩码255.255.254. ...

  5. Oracle11g 搭建单实例DataGuard (转载)

    原文:http://blog.itpub.net/29324876/viewspace-1246133/ 环境:主备库都为单实例并且数据库SID相同 OS:red hat 6.5 Oracle:11. ...

  6. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块

    HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在 ...

  7. cpu真实核数

    判断依据: 1.具有相同core id的cpu是同一个core的超线程. 2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores. 英文版: 1.Physical id an ...

  8. mybatis 3 -枚举

    定义枚举: public static enum AppStateEnum { Valid("有效"), Virtual("虚拟"), Hide("隐 ...

  9. html 原生tab切换js

    $("#ulId li").on('click', function () { $("#li-container").children().hide(); $( ...

  10. 使用.sig签名验证文件

    Linux下载文件的时候,由于网络等原因,下载的文件可能不完整,对于别有心机的人可以更改文件,这就需要我们对文件的完整性进行验证.这里以securityonion-14.04.5.2.iso为例进行验 ...