【发布时间】:2021-08-11 19:17:29
【问题描述】:
我有一个通过 bjam (V2) 实用程序构建的复杂 C++ 应用程序(以及一些用于引导环境的 shellscript)
在 Jamroot 文件中,有“include(s)”,其中一些被记录为内置,但很多看起来像“自定义”的东西。
我正在尝试添加单元测试,但我很难理解 bjam 实际在做什么的生命周期。官方错误是链接器未能“找到”真正应该可见的库,因为它们在编译时使用,我确实在 Jamroot 中看到了它们的“提及”。 Soo 我不确定是否需要在单元测试目标中明确声明某些内容以轻推它还是什么?我必须遵循一些特殊的“命令”吗?有人对此有任何经验吗?基本上我在我的代码所在的同一个目录中有一堆 unittest_someclass.cpp 文件,我希望它们作为构建的一部分进行编译/运行。每个测试都有自己的 main 函数来设置和运行测试。
我以为我所要做的就是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-build 没有什么神奇之处。如果你需要一些特殊的规则,你应该导入一些实现它的 jam 文件。 boost-build 的典型安装将在某个地方有一个
/usr/share/boost-build目录,其中包含各种有用的 jam 文件。 -
特别是,要使用
unit-test规则(已弃用),您应该import testing ;(github.com/boostorg/build/blob/develop/src/tools/testing.jam) -
我有导入,但是当我运行单元测试目标时,我从 ld: libwhatever.so 得到很多错误,需要 /usr/local/whatever not foudn 尝试使用 -rpath 或 -rpath -link,我在父 Jamroot 中声明了这些,它可以构建所有内容,但是当我尝试构建子项目时,我想我必须明确提及它...
-
显然您希望根据需要传递所有相关的编译和链接标志。
-
这正是我想弄清楚的方法