我想在使用Boost.Test时提供自己的主要功能。所以我已经包含了以下宏:
#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN
在我的主要功能中,我打电话给:
::boost::unit_test::unit_test_main(®istering_all_tests, argc, argv)
但是当使用Xcode 6在OS X上构建时,这会给我以下错误:
Undefined symbols for architecture x86_64:
"boost::unit_test::unit_test_main(bool (*)(), int, char**)", referenced from:
_main in main.o
我发现包含以下文件:
#include <boost/test/included/unit_test.hpp>
解决了这个问题,但我对这些问题感到困惑。该文件的描述表明它使用单元测试框架的包含(与链接)版本。
Boost入门指南指出:
Boost.Test可用于“仅标题”或“单独编译”模式, 虽然建议单独编译以供认真使用。
我已经单独构建了这个库。
Boost文档还指出:
将UTF直接包含在您的测试模块中
如果您希望避免使用独立库编译 要么包含构成您的静态库的所有文件 测试模块的makefile或将它们作为测试模块的一部分包含在内 源文件。为了方便以后的变体,UTF提出了 单头使用变体。无论哪种情况都没有特殊的构建选项 或宏定义需要添加到您的编译中 默认情况下的选项列表但是可以用于的相同标志 独立库编译适用于这种情况。虽然, 显然,BOOST_TEST_DYN_LINK和BOOST_TEST_NO_LIB都不是 适用。从长远来看,这个解决方案可能不是最好的选择, 因为它需要为每个测试模块重新编译UTF源 您使用它并且对于您正在使用的测试模块的每次更改 上。结果,您的测试周期时间可能会增加。如果它变成了 令人厌倦,我建议切换到预建的库使用之一 变体。
通过选择包含单元测试框架的包含(与链接)版本,我似乎错了。
有人可以澄清正确的方法。最重要的主要例子没有提到需要这样做。