Boost.Test是一个非常不错的单元测试库,但是当我尝试在新项目中对其进行配置时,总会遇到很大的麻烦。

如何配置我的使用cmake的项目,以便在满足以下要求的情况下使用boost(这实际上是我在Internet上发现的大多数食谱中不喜欢的事情的列表):

  • 我不想使用UTF的单个 header 变体(也就是说,我不想包含boost/test/included/unit_test.hpp)。这样做的理由是它会减慢编译和IDE的速度。
  • 我真的不想编写main函数-除非它是一个线性函数(我没有找到定义主函数的任何复制粘贴方法)。因此,除非您可以提供这样的主要代码段,否则这意味着Boost.Test是静态链接的。
  • 我不想静态地包含所有内容(通过-static gcc开关)。我也不想真的静态地编译每个boost组件。
  • 我不想在cmake配置中对任何库路径进行硬编码。

  • 所以这是我要使用的test.cpp:
    #define BOOST_TEST_MODULE ExampleTest
    #include <boost/test/unit_test.hpp>
    
    BOOST_AUTO_TEST_SUITE(ExampleSuite)
    
    BOOST_AUTO_TEST_CASE( my_test )
    {
        BOOST_CHECK(true);
    }
    
    BOOST_AUTO_TEST_SUITE_END()
    

    这是简单的(不起作用!)CMakeLists.txt:
    cmake_minimum_required(VERSION 2.8.11)
    project(example)
    add_executable(simple-test tests.cpp)
    

    最佳答案

    实际上,我没有找到任何满足我需要的具体解决方案,但是这里有两个部分解决方案,大多数情况下都可以。

    明确地静态链接到libboost_unit_test_framework.a:

    在这种情况下,CMakeLists.txt看起来像这样:

    cmake_minimum_required(VERSION 2.8.11)
    project(example)
    ADD_LIBRARY(boost_unit_test_framework STATIC IMPORTED)
    SET_TARGET_PROPERTIES(boost_unit_test_framework PROPERTIES
        IMPORTED_LOCATION /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.a)
    add_executable(simple-test tests.cpp)
    target_link_libraries(simple-test boost_unit_test_framework)
    

    缺点是我明确链接到可以更改的/usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.a(我想)。

    使用find_packages
    cmake_minimum_required(VERSION 2.8.11)
    set(Boost_USE_STATIC_LIBS ON)
    find_package(Boost COMPONENTS unit_test_framework REQUIRED)
    add_executable(simple-test tests.cpp)
    target_link_libraries(simple-test ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
    

    这样做的缺点是(据我所知set(Boost_USE_STATIC_LIBS ON)强制所有boost组件进行静态链接,这可能是不希望的。

    关于c++ - 如何使用cmake正确配置 boost 测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29074841/

    10-16 19:08
    查看更多