如何使用 bcp 提取 boost::filesystem
How to extract boost::filesystem using bcp
我正在尝试创建一个包含文件系统模块的 boost 库的子集,这样我就可以将该子集包含在我的项目存储库中。在我手动复制 .lib 文件之前,我遇到了链接器错误。我在 Windows 7 64 位上使用 Visual Studio 2013。
我已经使用 bcp 成功提取了 boost/algorithm/string.hpp 及其依赖项,步骤如下:
从 boost.org 下载 (v 1.57.0)。
已提取。
运行
bootstrap.bat
然后
b2.exe
如 Getting Started on Windows 所述。
(我不知道 b2 对我的目的是否必要。)
通过打开命令提示符构建 bcp 工具,我在其中提取了 boost 存档,并且 运行
bjam tools\bcp
如所述here。
通过 运行
创建了 boost 库子集
dist\bin\bcp.exe algorithm/string.hpp [outdir]
将结果复制到我的项目下的子文件夹中,将boost目录添加到C++包含搜索路径,并构建项目。
...
当我将文件系统或 filesystem.hpp 添加到上面的命令时,(即使我在我自己的源文件上使用 --scan 选项)并将结果复制到我的项目文件夹,然后只是尝试包括 "boost/filesystem.hpp",我得到
LINK : fatal error LNK1104: cannot open file 'libboost_system-vc120-mt-gd-1_57.lib'
在 bcp 的输出中找不到 *.lib
个文件。为了构建它,我必须手动将 libboost_system-*.lib
和 libboost_filesystem-*.lib
文件从 stage\lib\ 复制到我的项目(并将包含它们的目录添加到项目属性 -> 配置属性 ->链接器 -> 常规 -> 附加库目录)。
bcp 没有复制所需的所有内容,这是预期的行为吗?还是我错过了一步?还是 bcp 错误?
简答
bcp 只会复制源文件,因此您必须从 bcp 生成的源树中重新构建库。所以是的,这是预期的行为,是的,你错过了一步。 :)
我不认为是bcp本身的bug,但是生成Boost子集的过程肯定不是特别人性化。见下文。
长答案
如果您获得需要编译的依赖项(例如 boost/system),您还需要包含能够在新源代码树中构建所需的内容。 Boost 版本之间的依赖关系似乎有所不同,但通过反复试验,我发现对于 1.57,你需要添加 build
、bootstrap.bat
、bootstrap.sh
、boostcpp.jam
和 boost-build.jam
到 bcp 命令,以便您可以从新的源代码树进行构建:
dist\bin\bcp.exe algorithm/string.hpp build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam [outdir]
编辑: 根据 Boost 版本,您可能还需要在上面的行中添加 config
以防止构建错误(由 Sebastian Marsching 建议)。 -- 结束编辑
然后,这确实感觉像是构建脚本中的错误,您必须在新生成的树中打开顶级 Jamfile 并注释掉或删除提到 [= 的两个 use-project
行18=] 和 /boost/libs/wave/tool
。否则找不到这些目录将破坏构建。当然,另一种选择是在 bcp 命令行中包含 tools/inspect 和 wave,但是它们带来了很多依赖项,所以我不建议这样做,除非你想要这些特定的 tools/libraries .
然后您需要在您自己的项目中添加一个构建步骤来构建库,使用与构建完整 Boost 包相同的过程(即您的步骤 3,但在您的 "minified" 源代码中树)。
如果需要,您可以将已经构建的 b2 和 bjam 二进制文件添加到您的源代码树而不是 bootstrap 步骤,但是您将只能在这些二进制文件可以 运行.
顺便说一句,你第三步的 "b2" 部分确实没有必要。
我在GitHub上分叉了bcp,并编译出一个二进制文件bcp
,然后我使用这个二进制bcp从BOOST库中提取出所有必要的bcp头文件源文件。然后我打包了一个独立的 bcp 发行版。 (您可以轻松地编译代码并在 Windows 或 Linux 上获得一个无依赖性 bcp
文件。我在我的叉子上提供了几个下载 links。)
这个过程可能对你有帮助,看看here for detail. I came across link problems too, see Boost auto_link is the cause of build failure on Windows,把这个头文件注释掉就可以了。
Windows MSVC 上的 link 问题是由于 Boost 的自动link 行为。查看 boost/config/auto_link.hpp
了解更多信息。
我正在尝试创建一个包含文件系统模块的 boost 库的子集,这样我就可以将该子集包含在我的项目存储库中。在我手动复制 .lib 文件之前,我遇到了链接器错误。我在 Windows 7 64 位上使用 Visual Studio 2013。
我已经使用 bcp 成功提取了 boost/algorithm/string.hpp 及其依赖项,步骤如下:
从 boost.org 下载 (v 1.57.0)。
已提取。
运行
bootstrap.bat
然后b2.exe
如 Getting Started on Windows 所述。
(我不知道 b2 对我的目的是否必要。)通过打开命令提示符构建 bcp 工具,我在其中提取了 boost 存档,并且 运行
bjam tools\bcp
如所述here。
通过 运行
创建了 boost 库子集dist\bin\bcp.exe algorithm/string.hpp [outdir]
将结果复制到我的项目下的子文件夹中,将boost目录添加到C++包含搜索路径,并构建项目。
...
当我将文件系统或 filesystem.hpp 添加到上面的命令时,(即使我在我自己的源文件上使用 --scan 选项)并将结果复制到我的项目文件夹,然后只是尝试包括 "boost/filesystem.hpp",我得到
LINK : fatal error LNK1104: cannot open file 'libboost_system-vc120-mt-gd-1_57.lib'
在 bcp 的输出中找不到 *.lib
个文件。为了构建它,我必须手动将 libboost_system-*.lib
和 libboost_filesystem-*.lib
文件从 stage\lib\ 复制到我的项目(并将包含它们的目录添加到项目属性 -> 配置属性 ->链接器 -> 常规 -> 附加库目录)。
bcp 没有复制所需的所有内容,这是预期的行为吗?还是我错过了一步?还是 bcp 错误?
简答
bcp 只会复制源文件,因此您必须从 bcp 生成的源树中重新构建库。所以是的,这是预期的行为,是的,你错过了一步。 :)
我不认为是bcp本身的bug,但是生成Boost子集的过程肯定不是特别人性化。见下文。
长答案
如果您获得需要编译的依赖项(例如 boost/system),您还需要包含能够在新源代码树中构建所需的内容。 Boost 版本之间的依赖关系似乎有所不同,但通过反复试验,我发现对于 1.57,你需要添加 build
、bootstrap.bat
、bootstrap.sh
、boostcpp.jam
和 boost-build.jam
到 bcp 命令,以便您可以从新的源代码树进行构建:
dist\bin\bcp.exe algorithm/string.hpp build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam [outdir]
编辑: 根据 Boost 版本,您可能还需要在上面的行中添加 config
以防止构建错误(由 Sebastian Marsching 建议)。 -- 结束编辑
然后,这确实感觉像是构建脚本中的错误,您必须在新生成的树中打开顶级 Jamfile 并注释掉或删除提到 [= 的两个 use-project
行18=] 和 /boost/libs/wave/tool
。否则找不到这些目录将破坏构建。当然,另一种选择是在 bcp 命令行中包含 tools/inspect 和 wave,但是它们带来了很多依赖项,所以我不建议这样做,除非你想要这些特定的 tools/libraries .
然后您需要在您自己的项目中添加一个构建步骤来构建库,使用与构建完整 Boost 包相同的过程(即您的步骤 3,但在您的 "minified" 源代码中树)。
如果需要,您可以将已经构建的 b2 和 bjam 二进制文件添加到您的源代码树而不是 bootstrap 步骤,但是您将只能在这些二进制文件可以 运行.
顺便说一句,你第三步的 "b2" 部分确实没有必要。
我在GitHub上分叉了bcp,并编译出一个二进制文件bcp
,然后我使用这个二进制bcp从BOOST库中提取出所有必要的bcp头文件源文件。然后我打包了一个独立的 bcp 发行版。 (您可以轻松地编译代码并在 Windows 或 Linux 上获得一个无依赖性 bcp
文件。我在我的叉子上提供了几个下载 links。)
这个过程可能对你有帮助,看看here for detail. I came across link problems too, see Boost auto_link is the cause of build failure on Windows,把这个头文件注释掉就可以了。
Windows MSVC 上的 link 问题是由于 Boost 的自动link 行为。查看 boost/config/auto_link.hpp
了解更多信息。