Boost bjam Jamfile 导入语句

Boost bjam Jamfile import statement

我有一个复杂的 C++ 应用程序,它是通过 bjam (V2) 实用程序构建的(以及一些用于 bootstrap 环境的 shellscript)

在 Jamroot 文件中,有“include(s)”,其中一些被记录为内置的,但很多看起来像“自定义”的东西。

我正在尝试添加单元测试,但我很难理解 bjam 实际在做什么的生命周期。官方错误是链接器无法“找到”真正应该可见的库,因为它们在编译时使用,我确实在 Jamroot 中看到了它们的“提及”。所以我不确定是否需要在单元测试目标中显式声明某些内容以 nudge 还是什么?我必须遵循一些特殊的“命令”吗?有人对此有任何经验吗?基本上我在我的代码所在的同一目录中有一堆 unittest_someclass.cpp 文件,我希望它们 compile/run 作为构建的一部分。每个测试都有自己的主要功能,将设置和 运行 测试。

我以为我所要做的就是 import test; 并且所有要求都将从父 Jamroot 继承,但看起来情况并非如此?

Boost 版本为 1.53

这是我在 Jamfile 中添加的代码示例

 custom_lib_target my_project_lib
     :
   /boost//headers
   /some_other_stuff//etc
   ...
     :
    <warn_extra>off
    ...etc...
     ;

   #my unit_test target 
 exe boost_tester
   :
  my_project_lib
   ;

 unit-test test_all
 : [ glob unittest*.cpp ] boost_tester
 ;     

所以问题不在于 boost 测试框架(尽管可以更好地记录),问题在于 linker 无法找到各种库的调试变体 link反对。 (阅读警告有帮助。)因此,当从 root 运行 时构建对项目有效时,它对子项目失败,例如在尝试单独 运行 单元测试时。我能够通过硬编码(不理想但它有效)调试变体的路径来修复它,如下所示:

lib my_lib : : <file>/path/to/my_lib-d.so <variant>debug

然后像这样在测试版本中使用它

unit-test my_test : [ glob unittest*.cpp ] my_lib : ;

目前我对Boost.Build V2还不够熟悉,所以我不知道如何让它更“优雅”