Boost bjam-如何在构建目标之前始终执行shell脚本?
我的目标是建立一个包含版本信息的库 我有一个脚本,只有在版本实际发生更改时才会更新Boost bjam-如何在构建目标之前始终执行shell脚本?,boost,boost-build,bjam,b2,Boost,Boost Build,Bjam,B2,我的目标是建立一个包含版本信息的库 我有一个脚本,只有在版本实际发生更改时才会更新/version.cpp。这是为了防止不必要的重建 我有一个库目标globs*.cpp,它包括version.cpp 问题是,如果我运行bjam,我可以看到它执行脚本,并更新version.cpp,但是库不会重建。 只有当我再次运行bjam时,它才会看到version.cpp已更改,并重建库 我的jam文件: Echo [ SHELL "./write_version.sh" ] ; lib foo :
/version.cpp
。这是为了防止不必要的重建
我有一个库目标globs*.cpp
,它包括version.cpp
问题是,如果我运行bjam
,我可以看到它执行脚本,并更新version.cpp
,但是库不会重建。
只有当我再次运行bjam
时,它才会看到version.cpp
已更改,并重建库
我的jam文件:
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
$ bjam
Updating version.cpp
...found 119 targets...
$ bjam
...found 121 targets...
...updating 3 targets...
gcc.compile.c++ ../foo/bin/gcc-4.8/debug/link-static/version.o
gcc.archive ../foo/bin/gcc-4.8/debug/link-static/libfoo.a
...updated 3 targets...
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;
运行bjam的输出(两次):
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
$ bjam
Updating version.cpp
...found 119 targets...
$ bjam
...found 121 targets...
...updating 3 targets...
gcc.compile.c++ ../foo/bin/gcc-4.8/debug/link-static/version.o
gcc.archive ../foo/bin/gcc-4.8/debug/link-static/libfoo.a
...updated 3 targets...
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;
问题:
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
$ bjam
Updating version.cpp
...found 119 targets...
$ bjam
...found 121 targets...
...updating 3 targets...
gcc.compile.c++ ../foo/bin/gcc-4.8/debug/link-static/version.o
gcc.archive ../foo/bin/gcc-4.8/debug/link-static/libfoo.a
...updated 3 targets...
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;
如何使脚本和库构建一起工作?问题是,在加载
Jamfile
时,依赖关系会得到解决
ie:在示例Jamfile
中:
lib foo
: [ glob *.cpp ]
;
lib foo
: [ glob *.cpp ]
;
加载Jamfile
时,cpp文件是globbed
和stat'd
。任何没有过时的都不会重建
加载Jamfile
后,bjam
执行生成更新的version.cpp
的脚本,该脚本太晚了。
解决方法是在Jamroot
中执行shell脚本。这样,在加载使用它的Jamfile
之前,会更新version.cpp
。该文件是stat'd
,发现该文件已更新,并且lib foo
已重建
Jamroot:
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
$ bjam
Updating version.cpp
...found 119 targets...
$ bjam
...found 121 targets...
...updating 3 targets...
gcc.compile.c++ ../foo/bin/gcc-4.8/debug/link-static/version.o
gcc.archive ../foo/bin/gcc-4.8/debug/link-static/libfoo.a
...updated 3 targets...
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;
foo-Jamfile:
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
$ bjam
Updating version.cpp
...found 119 targets...
$ bjam
...found 121 targets...
...updating 3 targets...
gcc.compile.c++ ../foo/bin/gcc-4.8/debug/link-static/version.o
gcc.archive ../foo/bin/gcc-4.8/debug/link-static/libfoo.a
...updated 3 targets...
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;