【问题标题】:Conditionally compile if boost is present如果 boost 存在,则有条件地编译
【发布时间】:2013-09-14 16:44:05
【问题描述】:

我想有条件地编译一些使用 boost 的 c++ 代码,并使其在不存在 boost 时不会尝试编译依赖于 boost 的代码。

boost 是否有任何可以定义的全局宏,例如 __BOOST__,我可以检查?

编辑:现在我很清楚我必须在 makefile 级别上实现这一点。我正在研究 OSX 狮子。使用 gnu make

【问题讨论】:

  • 要定义这样的宏,您首先必须包含一个 boost 标头...如果不安装它会很困难!我最好的选择是在 makefile 级别检测到这一点。因此,答案将取决于您的构建系统。
  • @syam 好点,我没想到,但我仍然希望完成条件编译
  • 通常,您会使用构建工具检测 boost,并有条件地设置一个宏——然后您可以将其用于条件编译。后一部分很简单,但是如果您不告诉我们您正在使用哪个构建系统/编译器/环境(例如 CMake、autotools...),我们就无法回答第一部分。
  • @syam 查看编辑
  • @aaronman 通过查看 CMake、Ant、Maven、Ninja、automake 等内容,让您的生活更轻松。

标签: c++ macos boost conditional-compilation


【解决方案1】:

完成此操作的典型方法是使用“配置脚本”或类似方法,检测是否存在必需/可选组件,然后有选择地为构建系统设置一些 -D 选项。

显然,如果只是您自己的项目或小型发行版,您可以手动执行相同的操作。

如果有您需要的库文件,您可能还需要在 Makefile 中选择几个 ifdef 类型。

确定是否安装了您需要的 boost 的一部分的一种更简单的方法是尝试编译它。如果有错误,可能的原因是 boost 的那部分不存在(如果缺少更重要的部分,这显然不起作用 - 例如,没有安装编译器或标准库也会导致编译为失败。这就是为什么几乎所有配置类型工具“从最基本的功能开始,然后沿着依赖关系树向上工作”)。

【讨论】:

  • 如果你不说我如何识别是否安装了 boost,那并不是很有帮助,这是我唯一需要知道我可以自己编写的脚本的部分
  • @aaronman 问题是,boost 不是单体,所以不清楚如何定义“已安装增强”的含义。
  • @juanchopanza 好吧,如果没有办法,那我想这就是答案
  • @aaronman:通常,检查包括尝试构建一个包含/链接您需要的所有 boost 组件的最小程序;如果编译成功,你就知道你有需要的 boost 部分。
  • @MatteoItalia 是的,我只是想这样做
猜你喜欢
  • 2016-03-08
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多