在提升构建中根据操作系统选择编译器选项
Choosing compiler options based on the operating system in boost-build
目前,我可以通过在命令行中设置工具集和参数,在不同的平台上使用 boost build 构建我的程序。例如:
Linux目录
b2
苹果操作系统
b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"
有没有办法在 Jamroot 文件中创建一个规则来根据操作系统决定使用哪个编译器?我正在寻找类似这些内容的内容:
import os ;
if [ os.on-macos ] {
using clang : <cxxflags>"-stdlib=libc++" <linkflags>"-stdlib=libc++c ;"
}
在 Linux 中,它会自动决定使用 gcc,但在 Mac 中,如果我不指定 clang 工具集,它将尝试(没有成功)使用 gcc 编译它。
仅供参考,这是我当前的 jamroot(任何建议也表示赞赏):
# Project requirements (note, if running on a Mac you have to build foghorn with clang with libc++)
project myproject
: requirements <cxxflags>-std=c++11 <linkflags>-std=c++11 ;
# Build binaries in src
lib boost_program_options ;
exe app
: src/main.cpp src/utils src/tools boost_program_options
;
如何使用 Jamroot?我有以下内容。它在 Linux 上的两个 GCC 版本之间进行选择,具体取决于环境变量中的内容,并在 AIX 上选择 vacpp。
if [ os.name ] = LINUX
{
switch [ modules.peek : ODSHOME ]
{
case *gcc-4* : using gcc : 4.4 : g++-4.4 ;
case *gcc-3.3* : using gcc : 3.3 : g++-3.3 ;
case * : error Only gcc v4 and gcc v3.3 supported. ;
}
}
else if [ os.name ] = AIX
{
using vacpp ;
}
else
{
error Only Linux and AIX supported at present. ;
}
经过很长时间,我发现真的没有办法(除了非常黑客)做到这一点。Boost.Build 的目标是让用户定义工具集选项。
用户可以通过多种方式指定工具集:
- 例如,在
- 带有
--toolset=gcc
的命令行中 - 在用户配置中,通过在用户编译的所有项目的
user-config.jam
中设置它
在 - 站点配置中,方法是在所有用户的
site-config.jam
中对其进行设置
user-config.jam
可以位于用户的$HOME中,也可以位于提升构建路径中。
site-config.jam
应该在/etc 目录中,但也可能在上面的两个位置。
总之,设置您的站点配置或用户配置以获得愉快的体验,并为尝试编译程序的用户编写一个不错的自述文件。
希望这对其他人有所帮助。
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 在C++中设置基于操作系统的文件路径
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 在提升构建中根据操作系统选择编译器选项
- 需要帮助选择实时操作系统和硬件