[原创]分享本人自己PY写的BOOST编译程序(源码)

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

支持64位编译模式。

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

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

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

分享我写的IOCP:源码+思路

首先说明,下面的代码仅是一个IOCP的demo,很多地方的设计非常差,当然也有一些设计还算可以:).此篇仅供对IOCP有些了解但又不深入的.需要一个稍微完整示例的.对网络编程感兴趣的同学参考.点击这里下载代码 整个程序的流程如下: 流程完全是无阻塞的,主线程里,将收到的消息全都一次性取出后,然后派发.所有欲发送的消息都缓存起来,等到更新的时候一起发送.有些地方代码没有完善,比如断开连接后,socket.内存等资源的关闭回收.要注意MAXRECEIVEDBUFFLENGTH这个宏,它是定义每个so

boost.asio源码剖析(三) ---- 流程分析

* 常见流程分析之一(Tcp异步连接) 我们用一个简单的demo分析Tcp异步连接的流程: 1 #include <iostream> 2 #include <boost/asio.hpp> 3 4 // 异步连接回调函数 5 void on_connect(boost::system::error_code ec) 6 { 7 if (ec) // 连接失败, 输出错误码 8 std::cout << "async connect error:"

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

* 前言 源码之前,了无秘密.                                                       ——侯捷 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一.Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C++社区中影响甚大,是不折不扣的“准”标准库. boost.asio是Boost库中非常著名的I/O组件,是用于网络和低层IO编程的跨平台C++库,为开发

boost.asio源码剖析(四) ---- asio中的泛型概念(concepts)

* Protocol(通信协议) Protocol,是asio在网络编程方面最重要的一个concept.在第一章中的levelX类图中可以看到,所有提供网络相关功能的服务和I/O对象都需要Protocol来确定一些细节. Protocol的约束摘要如下: 1 class protocol 2 { 3 public: 4 /// Obtain an identifier for the type of the protocol. 5 int type() const; 6 7 /// Obtain

分享一个Unity3D小作品,欢迎索取源码!

在一年多前知道了Unity这款游戏引擎.在得知她极大地简化游戏开发的难度并可以使用我最熟悉的C#开发后,便毅然决然地开始学习Unity3D.说来惭愧,期间,由于个人原因,学习断断续续,直到现在才有一个勉强拿的出手的小作品.这款小游戏是一款类似超级马里奥的冒险游戏,玩法简单明了不费脑. 游戏截图 菜单界面 查看最高分 设置游戏难度,主要是设置主角受攻击时的伤害 可以通过跳跃攻击小怪兽 匕首攻击 滑行越过障碍物 乘坐来回移动的平台去往目的地 你赢了!就这样! 操作键设置 在该项目中自定义了几个操作键

【【分享】深入浅出WPF全系列教程及源码 】

因为原书作者的一再要求,在此声明,本书中的部分内容引用了原书名为<深入浅出WPF>的部分内容,假设博文不能满足你现有的学习须要,能够购买正版图书! 本人10月份提出离职,可是交接非常慢,预计年底才会交接完,趁着交接之际,自学了一下WPF,由于这是微软未来的发展趋势,自WIN7以来包含前不久公布的WIN8,核心还是WPF,在此,将自己的学习成果做一个总结,同一时候将自己学习积累的东西和广大博友分享,希望大家能共同进步.在文章的结尾我会将全系列的源码地址提供给大家,有须要的朋友能够下载下来自己研究

boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合

有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某某类型的语言而设计,而是一切以工程实践为目的,一切以提升语言能力为目的. 1983年C++诞生之时,由于兼容C语言而天生拥有了面向过程编程的能力:       1989年推出的2.0版,C++完善了对面向对象编程范式的支持:       1993年的3.0版,C++中引入了模板(template),

boost.asio源码剖析(二) ---- 架构浅析

* 架构浅析 先来看一下asio的0层的组件图.                     (图1.0) io_object是I/O对象的集合,其中包含大家所熟悉的socket.deadline_timer等对象,主要功能是提供接口给用户使用. services服务是逻辑功能的实现者,其中包含提供定时功能的deadline_timer_service.提供socket相关功能的win_iocp_socket_service(windows平台)/reactive_socket_service(其他

boost.asio源码剖析

一. 前 言二. 架构浅析三. 流程分析     * 常见流程分析之一(Tcp异步连接)      * 常见流程分析之二(Tcp异步接受连接)      * 常见流程分析之三(Tcp异步读写数据)      * 常见流程分析之四(Tcp强制关闭连接)      * 常见流程分析之五(Tcp优雅地关闭连接)四. asio中的泛型concepts      * Protocol      * InternetProtocol      * ConstBuffer, ConstBufferSequen