使用Cmake编译升压测试

Compiling a boost test with Cmake

本文关键字:测试 编译 Cmake 使用      更新时间:2023-10-16

我正试图通过让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吗?

您需要将单元测试框架包含在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}
                      )

现在在CMake 3中,我建议使用导出的命名空间目标,而不是变量。如果你有错别字,弗雷泽的答案将无法链接。此外,如果可以的话,请显式指定链接类型。

find_package(Boost CONFIG COMPONENTS system filesystem unit_test_framework REQUIRED)
...
target_link_libraries(testTheTester
  PRIVATE
  Boost::filesystem
  Boost::system
  Boost::unit_test_framework
  )