我的目标是建立一个包含版本信息的库。
我有一个脚本,只有在版本实际更改时才会更新./version.cpp
。这样可以防止不必要的重建。
我有一个lib目标,其中包含*.cpp
,其中包含version.cpp
。
问题在于,如果我运行bjam
我可以看到它执行脚本,并更新version.cpp
,但库未重建。
只有当我再次运行bjam
时才会看到version.cpp
已更改,并重建lib
我的果酱文件:
Echo [ SHELL "./write_version.sh" ] ;
lib foo
: [ glob *.cpp ]
;
运行bjam的输出(两次):
$ 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...
问题:
如何让两者脚本和库构建一起工作?
答案 0 :(得分:1)
问题是在加载Jamfile
时解析了依赖关系
ie:在示例中Jamfile
:
lib foo
: [ glob *.cpp ]
;
加载globbed
时,cpp文件为stat'd
和Jamfile
。任何未过期的都不会被重建。
加载Jamfile
后,bjam
执行生成更新version.cpp
的脚本,太晚了。
解决方法是在Jamroot
中执行shell脚本。以这种方式version.cpp
更新之前加载使用它的Jamfile
。该文件为stat'd
,已找到要更新,并且lib foo
已重建。
<强> Jamroot中:强>
Echo [ SHELL "./write_version.sh" ] ;
build-project foo ;
foo Jamfile:
lib foo
: [ glob *.cpp ]
;