1

我的目标是建立一个包含版本信息的库。

我有一个脚本,./version.cpp 只有在版本实际更改时才会更新。这是为了防止不必要的重建。

我有一个 glob 的 lib 目标*.cpp,其中包括version.cpp.

问题是,如果我运行,bjam我可以看到它执行脚本和 update 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...

问题:

如何让脚本库构建一起工作?

4

1 回答 1

0

问题是在Jamfile加载时解决了依赖关系

即:在示例中Jamfile

lib foo
    : [ glob *.cpp ]
    ;

cpp 文件是globbedstat'd何时Jamfile加载的。任何没有过时的都不会重建。

加载后Jamfilebjam执行生成更新的脚本,version.cpp为时已晚。

一种解决方法是在Jamroot. 以这种方式在加载哪个使用它之前version.cpp更新。该文件是,发现更新,并重建。Jamfilestat'dlib foo

果酱:

Echo [ SHELL "./write_version.sh" ] ;

build-project foo ;

foo Jamfile:

lib foo
    : [ glob *.cpp ]
    ;
于 2014-07-07T01:28:26.943 回答