【问题标题】:Install Boost headers to specific directory (Windows)将 Boost 标头安装到特定目录 (Windows)
【发布时间】:2013-09-11 03:15:28
【问题描述】:

我已经下载、提取和编译了 Boost 库(包括单独编译的库)。我现在已经使用了他们的安装程序几次,但我似乎无法让它完全按照我的意愿去做。现在,当我在编译后安装 Boost 时会转到

C:\Boost

这很好。编译好的库去

C:\Boost\lib

这也很好。我遇到的问题是预编译头文件的安装。他们被放在了

C:\Boost\include\boost-1_54\boost

有没有办法使用Boost构建系统和安装工具将要安装的预编译头设置为just

C:\Boost\include

并且 Boost 版本号不是该文件夹层次结构的一部分?

我不打算同时使用多个版本的 Boost,因此我没有实际使用该版本号的用途。我意识到我可以在安装完成后手动移动它们,但我想先看看我是否忽略或误解了 Boost 的构建系统。

【问题讨论】:

  • 在构建 boost 时调用了哪些命令? “预编译头文件”是什么意思?
  • 我跑了bootstrap 然后.\b2 -j8 --prefix=C:\Boost --libdir=C:\Boost\lib --includedir=C:\Boost\include install。预编译的头文件是不需要编译就可以使用的hpp文件,在include目录下的文件。
  • 我明白了。添加--layout=system会得到什么?
  • 这样我就更接近了。为了使用--layout=system,我还必须指定我正在构建的变体(我决定暂时默认发布),以防止库上的文件名冲突。问题是包含目录仍然看起来像C:\Boost\include\boost\[all hpp files]。有没有办法摆脱路径中的第二次“提升”? 编辑 抱歉,我刚刚意识到我在提示中输入错误的选项之一。我再试一次。 编辑 2 好的,我已经修复了命令行问题,但它仍在路径中添加第二个 Boost。
  • 好吧,有了Boost.Build,您几乎可以做任何事情,但这并不是那么简单。我猜你必须使用user-config.jam 文件(boost.org/doc/display_build.php/boost-build/boost-build/doc/…)自定义你的目标。此外,尝试向 boost-users ML 发帖。

标签: c++ windows boost installation


【解决方案1】:

--layout=system 从包含路径中删除版本化子目录(正如@IgorR. 指出的那样)。

“删除路径中的第二个提升”是个坏主意。在一个受人尊敬的操作系统中(咳...),各种库的包含文件应该共存于一个公共包含目录中,因此boost 子目录以避免冲突。因此,Boost 标头通常被称为例如#include <boost/any.hpp>,即包括那个boost/子目录。

这是由使用 Boost 的第三方软件和 Boost 本身完成的。如果你从路径中删除第二个boost,你最终会得到C:\Boost\include\any.hpp,并且任何使用 Boost 的软件都不会编译,因为甚至 Boost 都找不到它自己的包含。

【讨论】:

  • 我知道这个问题很古老,但没有答案看起来很孤独......
  • --layout=system 在我编译两个调试|发布版本时构建失败...仍在寻找答案。
  • 试试--layout=tagged。它会删除额外的版本子文件夹,但会生成像 libboost_system-mt-x64.lib 这样的库名称以避免名称冲突。
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多