linux下通过user-config.jam指定编译器编译boost

bjam是boost的编译工具,类似于gnu make,boost就是用bjam编译的,bjam很聪明,在编译boost的时候,会自动从系统中寻找合适的编译器来完成boost编译。 但是如果系统中存在多个编译器的时候,就有点麻烦了,比如: 系统的默认编译器是/usr/bin/g++ ,另外我又装了个更高版本的编译器在/usr/local/bin/g++。 在编译boost时,bjam可能会自动找到/usr/bin/g++,而我希望使用/usr/local/bin/g++来编译。 如果不想使用bjam自动找到的编译器来编译boost,就需要指定编译器,为bjam指定编译器是通过定义user-config.jam来实现的,只要定义一个user-config.jam文件,按指定的格式在文件中指定编译器,并将user-config.jam文件的位置告诉bjam(bjam会在$HOME, $BOOST_BUILD_PATH定义的文件夹下寻找user-config.jam)。

#定义boost安装路径
INSTALL_FOLDER=$INSTALL_PREFIX_ROOT/$(install_suffix boost)
echo INSTALL_FOLDER:$INSTALL_FOLDER
remove_if_exist $INSTALL_FOLDER
bzip2_path=$INSTALL_PREFIX_ROOT/$(install_suffix "bzip2")
exit_if_not_exist $bzip2_path "not found $bzip2_path,please build bzip2"
pushd boost-1.58.0
# 指定依赖库bzip2的位置,编译iostreams库时需要
#export LIBRARY_PATH=$bzip2_path/lib:$LIBRARY_PATH
#export CPLUS_INCLUDE_PATH=$bzip2_path/include:$CPLUS_INCLUDE_PATH
# 生成 user-config.jam 指定编译器/usr/local/bin/g++,版本号5.4.0
export BOOST_BUILD_PATH=$(pwd)
echo "using gcc : 5.4.0 : /usr/local/bin/g++ ;" >$BOOST_BUILD_PATH/user-config.jam
cat $BOOST_BUILD_PATH/user-config.jam
# 所有库列表
# atomic chrono container context coroutine date_time exception filesystem 
# graph graph_parallel iostreams locale log math mpi program_options python 
# random regex serialization signals system test thread timer wave
# --without-libraries指定不编译的库
#./bootstrap.sh --without-libraries=python,mpi,graph,graph_parallel,wave
# --with-libraries指定编译的库
./bootstrap.sh --with-libraries=system,thread,filesystem,regex
exit_on_error
./b2 --clean
# --debug-configuration 编译时显示加载的配置信息
./b2 -q --debug-configuration
exit_on_error
# 安装到指定位置
./b2 install --prefix=$INSTALL_FOLDER

popd

说明: 上面的脚本并不完整,脚本中中使用的exit_on_error,install_suffix,remove_if_exist等函数参见我的上一篇博客 《linux下boost编译安装全过程脚本塈bzip2编译安装全过程脚本》

在关于user-config.jam配置文件更详细的说明参见下面参考资料中的boost官方说明《Configuration》

参考资料

《Configuration》 《boost 1.56.0 编译及使用》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨熹的专栏

详解Mac配置虚拟环境Virtualenv,安装Python科学计算包

最近正在自学Python做科学计算,当然在很多书籍和公开课里最先做的就是安装Numpy, Scipy, Matplotlib等包,不过每次安装单独的包时,...

2678
来自专栏君赏技术博客

使用`agvtool`自动化版本号和编译号

版本和内部版本号码Key分别指定市场和应用程序的内部版本。agvtool是一个命令行工具,它允许你这些数字自动递增到下一个最高号码或特定号码。 本文档提供循序...

622
来自专栏码匠的流水账

jib自定义entrypoint

jib的自定义entrypoint是0.9.10及以上版本才支持的,若需要自定义entrypoint,请先升级jib版本。

431
来自专栏不想当开发的产品不是好测试

jenkins修改时区

查看jenkins目前的时区 访问http://your-jenkins/systemInfo,查看user.timezone变量的值 ? 默认是纽约时间 修改...

22710
来自专栏上善若水

L017 android cmake的使用

指定编译库的环境,其中Toolchain Default使用的是默认的CMake环境;C++ 11也就是C++环境。两种环境都可以编库,至于区别,后续会跟进,当...

913
来自专栏IMWeb前端团队

教你开发whistle插件

whistle介绍 whistle是一款用Node实现的跨平台的Web调试代理工具,支持查看修改http(s)、Websocket连接的请求和响应内容。IMWE...

2190
来自专栏xingoo, 一个梦想做发明家的程序员

linux下Apache服务器使用入门----httpd.conf

如果安装centos,系统本身已经安装了apache,名字为httpd这个服务就是对应的apache service httpd start service ...

2185
来自专栏帘卷西风的专栏

使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的...

1502
来自专栏专注数据中心高性能网络技术研发

解决Boost库链接出错问题

安装完最新的Boost库 官方说明中有一句话: Finally, $ ./b2 install will leave Boost binaries in the...

2383
来自专栏Jerry的SAP技术分享

使用代码获得Netweaver里某个software component和C4C的版本

有同事问如何通过代码的方式获得Netweaver里某个Software component的版本信息,以及Cloud for Customer(C4C)的版本信...

2212

扫码关注云+社区