使用 Boost.Log "error: target { simple_event_log.mc. } has no type" 构建 Boost

Building Boost with Boost.Log "error: target { simple_event_log.mc. } has no type"

本文关键字:Boost mc has type 构建 log no simple error Log target      更新时间:2023-10-16

我正在尝试构建Boost.Log(http://boost-log.sourceforge.net/libs/log/doc/html/index.html)。我将它添加到我的助推源中,并执行我通常的助推构建命令。

b2 --build-dir="D:boost1.51.0boost" toolset=gcc variant=release link=static threading=multi  runtime-link=static --build-type=complete

但什么都没发生,我最终收到了这个:

D:/boost/1.51.0/src/tools/build/v2/buildgenerators.jam:1085: in ensure-type from module generators
error: target { simple_event_log.mc. } has no type
D:/boost/1.51.0/src/tools/build/v2/buildgenerators.jam:1319: in generators.construct from module generators
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1495: in construct from module object(typed-target)@491
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1298: in object(typed-target)@491.generate from module object(typed-target)@491
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:732: in generate-really from module object(main-target)@1871
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:704: in object(main-target)@1871.generate from module object(main-target)@1871
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:258: in object(project-target)@474.generate from module object(project-target)@474
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:848: in targets.generate-from-reference from module targets D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1217: in generate-dependencies from module object(install-target-class)@96
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1269: in object(install-target-class)@96.generate from module object(install-target-class)@96
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:732: in generate-really from module object(main-target)@930 D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:704: in object(main-target)@930.generate from module object(main-target)@930
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:848: in targets.generate-from-reference from module targets D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1217: in generate-dependencies from module object(top-level-target)@103
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1269: in alias-target-class.generate from module object(top-level-target)@103
D:/boost/1.51.0/srcboostcpp.jam:391: in build-multiple from module object(top-level-target)@103
D:/boost/1.51.0/srcboostcpp.jam:376: in object(top-level-target)@103.generate from module object(top-level-target)@103
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:732: in generate-really from module object(main-target)@934 D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:704: in object(main-target)@934.generate from module object(main-target)@934
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:848: in targets.generate-from-reference from module targets D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1217: in generate-dependencies from module object(top-level-target)@104
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:1269: in alias-target-class.generate from module object(top-level-target)@104
D:/boost/1.51.0/srcboostcpp.jam:391: in build-multiple from module object(top-level-target)@104
D:/boost/1.51.0/srcboostcpp.jam:376: in object(top-level-target)@104.generate from module object(top-level-target)@104
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:732: in generate-really from module object(main-target)@935 D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:704: in object(main-target)@935.generate from module object(main-target)@935
D:/boost/1.51.0/src/tools/build/v2/buildtargets.jam:258: in object(project-target)@42.generate from module object(project-target)@42
D:/boost/1.51.0/src/tools/build/v2build-system.jam:736: in load from module build-system
D:boost1.51.0srctoolsbuildv2/kernelmodules.jam:283: in import from module modules
D:boost1.51.0srctoolsbuildv2/kernel/bootstrap.jam:142: in boost-build from module
D:boost1.51.0srcboost-build.jam:17: in module scope from module                                   

你能解释一下这意味着什么吗?或者我如何才能看到更多的错误信息?你是如何构建Boost.Log的?

问题的答案可以在这里找到:

其次,在某个时刻,库将需要一个消息编译器工具(mc.exe),在MinGW、Cygwin和MSVC Express中不可用版本你有两种选择来解决这个问题。如果是MinGW和Cygwin,您可以使用windmc.exe工具,该工具类似于原始的mc.exe。为了做到这一点,您必须进行修补Boost.Build文件(特别是tools/Build/v2/tools/mc.jam文件)。之后,您将能够将mccompiler=windmc选项指定为bjam以构建库。

这是补丁的链接。应用补丁并通过mc-compiler=windmc应该可以解决问题。

注意:此外,如票证中的注释所示,您需要在toolsbuildv2toolsgcc.jam中的import fortran ;之后添加import mc ;

以下是应用补丁后的mc.jam文件的外观(请确保您的文件如下所示):

import common ;
import generators ;
import feature : feature get-values ;
import toolset : flags ;
import type ;
import rc ;
feature.feature mc-compiler : mc windmc : propagated ; 
feature.set-default mc-compiler : mc ; 
rule init ( )
{
}
type.register MC : mc ;

# Command line options
feature mc-input-encoding : ansi unicode : free ;
feature mc-output-encoding : unicode ansi : free ;
feature mc-set-customer-bit : no yes : free ;
flags mc.compile MCFLAGS <mc-input-encoding>ansi : -a ;
flags mc.compile MCFLAGS <mc-input-encoding>unicode : -u ;
flags mc.compile MCFLAGS <mc-output-encoding>ansi : -A ;
flags mc.compile MCFLAGS <mc-output-encoding>unicode : -U ;
flags mc.compile MCFLAGS <mc-set-customer-bit>no : ;
flags mc.compile MCFLAGS <mc-set-customer-bit>yes : -c ;
generators.register-standard mc.compile.mc : MC : H RC : <mc-compiler>mc ; 
generators.register-standard mc.compile.windmc : MC : H RC : <mc-compiler>windmc ;
actions compile.mc
{ 
    mc $(MCFLAGS) -h "$(<[1]:DW)" -r "$(<[2]:DW)" "$(>:W)" 
}
actions compile.windmc
{ 
    windmc $(MCFLAGS) -h "$(<[1]:DW)" -r "$(<[2]:DW)" "$(>:W)" 
} 

警告

boost-logbranchesbleeding-edge无法为我编译(gcc 4.7.1)。我使用了boost-logtrunkboost-log中的一个成功构建(构建于2012-09-05)。

尝试:

b2 toolset=gcc --build-type=complete threading=multi architecture=x86 address-model=32 --with-log define=BOOST_LOG_USE_CHAR --stagedir=.

它对我的Boost 1.51和Boost::Log版本721 有效