|
Boost-Build : |
Subject: [Boost-build] Need help: generate rule error
From: ÐлекÑей ÐадÑев (leemouse_at_[hidden])
Date: 2009-04-29 00:07:34
Hi, All!
I need generate .def file for my library. I use second commands for it:
echo EXPORTS > mylib.def
nm mylib_1.obj | grep " T " | grep " _mylib_" | sed "s/^.* _//"
>>mylib.def
...
nm mylib_N.obj | grep " T " | grep " _mylib_" | sed "s/^.* _//"
>>mylib.def
First, I create make target in my Jamfile, and it works (not always):
---------------------------------------------------------------------
make $(mylib-source-locate)/mylib.def
: # sources
$(MYLIB_OBJ)
: # generator
@mylib-def
;
rule mylib-def ( target : sources * : properties * )
{
NM on $(target) = nm ;
}
actions mylib-def
{
echo EXPORTS > "$(<)"
$(NM) "$(>)" | grep " T " | grep " _mylib_" | sed "s/^.* _//" >>"$(<)"
}
explicit $(sqlite-source-locate)/sqlite3.def ;
When I use solution above, I get the error from Boost Build: "Action too
long (8192 max)".
Then I rework with using generate rule (proces sources by one at time):
----------------------------------------------------------------------
rule generate-def ( project name : property-set : sources * )
{
local result ;
local a = [ new non-scanning-action : def-init : $(property-set) ] ;
result += [ new file-target $(name) $(name) : : $(project) : $(a) ] ;
for local s in $(sources)
{
a = [ new non-scanning-action $(s) : def-proc : $(property-set) ] ;
result += [ new file-target $(name) $(name) : : $(project) :
$(a) ] ;
}
return $(result) ;
}
rule def-init ( target : sources * : properties * )
{
}
actions def-init
{
echo EXPORTS > "$(<)"
}
rule def-proc ( target : sources * : properties * )
{
}
actions def-proc
{
$(NM) "$(>)" | grep " T " | grep " _mylib_" | sed "s/^.* _//" >>"$(<)"
}
generate mylib.def
: $(MYLIB_OBJ)
: <generating-rule>@generate-def
;
explicit mylib.def ;
BUT this code not work: Boost Build report me about error (this is all
output from bjam):
*c:/devtools/libs/boost_1_38_0/tools/build/v2/kernel\modules.jam:103: in
modules.call-in
rule def-init unknown in module object(non-scanning-action)@1337.
c:/devtools/libs/boost_1_38_0/tools/build/v2/util\indirect.jam:90: in
indirect.call
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:758:
in object(non-scanning-action)@1337.actualize
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:301:
in actualize-action
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:489:
in actualize-no-scanner
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:130:
in object(file-target)@1338.actualize
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:779:
in actualize-source-type
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:798:
in actualize-sources
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:740:
in object(action)@1508.actualize
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:301:
in actualize-action
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:489:
in actualize-no-scanner
c:/devtools/libs/boost_1_38_0/tools/build/v2/build\virtual-target.jam:130:
in object(file-target)@1509.actualize
c:/devtools/libs/boost_1_38_0/tools/build/v2\build-system.jam:695: in load
c:\devtools\libs\boost_1_38_0\tools\build\v2/kernel\modules.jam:283: in
import
c:\devtools\libs\boost_1_38_0\tools\build\v2\kernel\bootstrap.jam:138:
in boost-build
c:\devtools\libs\boost_1_38_0\boost-build.jam:16: in module scope
*
-- С Ñважением, ÐлекÑей ÐадÑев г. ÐемеÑово пÑ-Ñ Ðенина 52 Ñел. +7 904 375 7805
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk