专栏首页10km的专栏linux下通过user-config.jam指定编译器编译boost

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 条评论
登录 后参与评论

相关文章

  • cmake:pkg_check_modules(FindPkgConfig)的新特性IMPORTED_TARGET

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • MSVC/MinGW中导入glog静态库的正确方式

    在linux下使用glog静态库,编译连接时只要加上glog静态库文件(.a)就可以了,在windows环境,我也同样的办法在自己的项目中使用glog静态库,用...

    用户1148648
  • jface databinding: Radio Button group及ISideEffect绑定数据对象的例子

    下图左侧是三个Radio button,设计的要求是选择不同的radio button,右侧的三个group会分别有不同的可见状态(visible),并且将ra...

    用户1148648
  • 携程梁建章:人工智能不会带来失业危机,也不会取代人类进行创新

    问耕 发自 凹非寺 量子位 报道 | 公众号 QbitAI ? 上个周末,携程联合创始人、执行董事会主席梁建章出席在北大斯坦福中心举办的“CEO北京创业主题派对...

    量子位
  • C语言编程入门之--第二章编译环境搭建

      导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备...

    啊源股
  • JDK14中JVM的性能优化

    上一篇文章我们讲到了JVM为了提升解释的性能,引入了JIT编译器,今天我们再来从整体的角度,带小师妹看看JDK14中的JVM有哪些优化的方面,并且能够从中间得到...

    程序那些事
  • 过滤线粒体核糖体基因

    我们埋下了一个伏笔,就是拿到了差不多干净的表达矩阵后还有一个预处理步骤,但是这个步骤是选修,就是说你不会过滤线粒体核糖体基因也可以不做,没有人会责怪你,因为单细...

    生信技能树jimmy
  • 华为:既满足用户体验,又节省功耗的App应用设计开发方法

    IT大咖说
  • 僵尸网络新动向

    最近发现一些恶意软件活动影响了许多运行Linux的设备,该平台今年刚刚解决了许多问题。对检索到的恶意软件样本的进一步分析显示,这些操作与一个名为Momentum...

    FB客服
  • 假如我是计算机系老师

    假如我是计算机系老师, 我会先让我的学生先去读一下《编码:隐匿在计算机软硬件背后的语言》这本书, 搞明白一个个简单的逻辑门电路到底是怎么组成计算机的, 弄清楚计...

    华章科技

扫码关注云+社区

领取腾讯云代金券