如何在构建提升后列出失败的目标?

Tom*_*mar 9 windows boost mingw-w64

我正在使用mingw-4.8.1在我的窗口上构建boost并且有一些失败的目标.我的问题是,我不知道哪些具体目标失败了,哪些目标被忽略了.

有没有办法在构建完成后列出失败/跳过的目标?

这里是控制台输出:

...failed updating 20 targets...
...skipped 28 targets...
...updated 5789 targets...
Run Code Online (Sandbox Code Playgroud)

下载解压增强后使用的命令:

bootstrap
Run Code Online (Sandbox Code Playgroud)

一旦构建了b2.exe.我在cmd中执行以下命令

b2 -j4 --build-dir=build toolset=gcc --build-type=complete --stagedir=C:\SW\Boost -sNO_BZIP2=1
Run Code Online (Sandbox Code Playgroud)

系统:Windows 7(intel i5 vPro)
编译器:gcc(mingw 4.8.1)
提升:提升1.61.0

Kem*_*hou 10

我有同样的问题.经过一些研究,我发现这是查看它失败的最佳方式.

我的错误消息(取决于您的机器,您可能会看到不同的消息):

...failed updating 6 targets...
...skipped 6 targets...
...updated 1092 targets...
Run Code Online (Sandbox Code Playgroud)

我跑./b2 -q

在我的情况下,这将停止您的第一次错误:

gcc.compile.c++ bin.v2/libs/iostreams/build/gcc-4.8.3/release/threading-multi/bzip2.o
libs/iostreams/src/bzip2.cpp:20:56: fatal error: bzlib.h: No such file or directory
 #include "bzlib.h"  // Julian Seward's "bzip.h" header.
                                                        ^
compilation terminated.

    "g++"  -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -fPIC -m64  -DBOOST_ALL_NO_LIB=1 -DBOOST_IOSTREAMS_DYN_LINK=1 -DBOOST_IOSTREAMS_USE_DEPRECATED -DNDEBUG  -I"." -c -o "bin.v2/libs/iostreams/build/gcc-4.8.3/release/threading-multi/bzip2.o" "libs/iostreams/src/bzip2.cpp"

...failed gcc.compile.c++ bin.v2/libs/iostreams/build/gcc-4.8.3/release/threading-multi/bzip2.o...
...failed updating 1 target...
Run Code Online (Sandbox Code Playgroud)

然后,您可以安装缺少的依赖项,并查看您的第二个缺失的依赖项.要查看每个错误,您需要依次安装依赖项.如果您决定全力推进构建,这很好.在我的例子中,我编译了bzip库http://www.bzip.org/downloads.html.这个库很难制作.Boost需要Linux上的动态版本.

make -f Makefile-libbz2_so
Run Code Online (Sandbox Code Playgroud)

您必须手动将libbz2.so.1.0.6文件复制到/ usr/local/lib make两个符号链接

libbz2.so.1 -> libbz2.so.1.0.6
libbz2.so -> libbz2.so.1
Run Code Online (Sandbox Code Playgroud)

在此之后我可以提升,我看到:

The Boost C++ Libraries were successfully built!
Run Code Online (Sandbox Code Playgroud)

或者尝试./b2 -s NO_BZIP2 = 1跳过


Tom*_*mar 2

因此,更多的研究得出了以下结果。

b2 [options]
b2 --help人们可以使用揭示可以使用的选项来获取构建配置和其他构建输出 。我使用以下方法来准确诊断哪些目标失败或被跳过。

方法 1
正如 @JanHenke 在评论中所建议的,我运行了相同的命令

b2 -j4 --build-dir=build toolset=gcc --build-type=complete --stagedir=C:\SW\Boost -sNO_BZIP2=1
Run Code Online (Sandbox Code Playgroud)

(如问题中提到的)再次。
结果:跳过所有已构建的目标,仅显示失败的目标。
问题:如果有许多目标失败,那么这只会淹没控制台,并且很难找出发生了什么。

方法 2
运行命令(参见 1)并使用鼠标右键从命令提示符中选择所有内容,然后单击“增益”将其复制并粘贴到文本编辑器中,以便可搜索。
结果:可以通过搜索失败错误关键字来得出可用的见解
问题:仍然不是最佳方法,因为并非所有信息在当前 cmd 窗口上都可用。

方法 3 对我来说没有完成 2. 有效,但肯定有效
创建一个batchfile在其中写入命令的位置,并在 cmd 窗口上打印所有内容,使用 或>运算符将其记录在文本文件中>>

结果:将是了解哪些确切目标失败并可以采取适当的诊断措施的最佳方法(到目前为止我所知)。

PS我发现尝试使用 MinGW 构建序列化库时存在一个错误。下面是我面临的错误以及一个关于 boost 论坛的链接,其中讨论了相同的错误。

gcc.compile.c++ build\boost\bin.v2\libs\serialization\build\gcc-mingw-4.8.1\debug\xml_woarchive.o
In file included from ./boost/archive/detail/utf8_codecvt_facet.hpp:23:0,
                 from ./boost/archive/impl/xml_woarchive_impl.ipp:34,
                 from libs\serialization\src\xml_woarchive.cpp:28:
./boost/detail/utf8_codecvt_facet.hpp:116:30: error:  
 function 'boost::archive::detail::utf8_codecvt_facet::utf8_codecvt_facet(std::size_t)'
definition is marked dllimport  
Run Code Online (Sandbox Code Playgroud)

更多信息参考1参考2
遗憾的是还没有找到解决方案。另外,这不是这个问题的范围。