【问题标题】:Compiling a boost test with Cmake使用 Cmake 编译 boost 测试
【发布时间】:2012-04-10 11:56:17
【问题描述】:

我试图通过让 cmake 为我编译它来简化一个大型项目,但是我在编译 boost 单元测试时遇到了麻烦。我的简单示例的 cmake 文件如下所示。

cmake_minimum_required(VERSION 2.8)
find_package(Boost COMPONENTS system filesystem REQUIRED)
add_excecutable(testTheTester boostTester.cpp)
target_link_libraries(testTheTester ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY})
add_test(tester tester)

boostTester.cpp 中的代码是:

#define BOOST_TEST_MAIN
#if !defined( WIN32 )
    #define BOOST_TEST_DYN_LINK
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE( la ) {
    BOOST_CHECK_EQUAL(1, 1)
}

现在,如果我手动构建此 cpp 代码,它将编译并运行良好:

g++ boostTester.cpp -o output -lboost_unit_test_framework

并且 cmake 工作正常,但是当使用输出 make 文件时,make 崩溃并出现大量错误,其中第一个是:

undefined referance to 'boost::unit_test::unit_test_log_t::set_checkpoint(boost... bla bla

现在我最初的想法是 cmake 没有正确链接 boost 库,我尝试了许多命令和组合但没有运气。有谁知道如何在 cmake 文件中链接 boost_unit_test?

【问题讨论】:

    标签: c++ boost cmake


    【解决方案1】:

    需要在find_package命令的需求列表中包含单元测试框架,然后链接:

    find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
    ...
    target_link_libraries(testTheTester
                          ${Boost_FILESYSTEM_LIBRARY}
                          ${Boost_SYSTEM_LIBRARY}
                          ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
                          )
    

    【讨论】:

    • 干杯,这很有魅力,作为说明,您如何找到这些包以及它们的名称以供将来使用?
    • 我认为它们通常与bjam --show-libraries 的输出相匹配。 Test 是 lib 名称反映 bjam 目标的约定的例外之一(可能是唯一的?)。 bjam 目标只是“test”,而库名称包括“unit_test_framework”。 CMake 的模块似乎更倾向于根据库名称而不是 bjam 目标名称来命名其变量。
    • @Fraser @Ben 只需将unit_test_framework 添加到您的FIND_PACKAGE 命令中,然后在target_link_libraries 命令中使用${Boost_LIBRARIES}。对于名称:它们只是没有boost_|libboost_ 前缀的库文件名。
    • @JohannesS。是的 - 如果您确实想要链接到 find_package 命令中的所有 boost 库,这是一个不错的选择。但是,通常不需要所有目标都需要它们。例如,单元测试框架库可能不需要链接到主生产库或可执行文件。
    • @Fraser 不,根据FindBoost.cmake 中的代码和文档,${Boost_LIBRARIES} 仅包含您在FIND_PACKAGE(...) 命令中列出的那些库。没有过度链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多