C++项目如何使用CMakeLists.txt添加boost库

如果你的工程使用到了boost库,并且工程是由CMakeLists.txt构建的,这个文章会展示如何添加boost到Cmake中,其中顺带使用了gtest搭建测试用例

假设有一个工程,目录结构如下

.
├── boost_thread_test.cc
└── CMakeLists.txt

0 directories, 2 files

其中测试用例代码使用到了boost::chrono和boost::thread:

#include <gtest/gtest.h>

#include <boost/thread.hpp>
#include <iostream>

static int make_one_thread() {
  boost::thread bt([] { std::cout << "hello world\n"; });
  bt.join();
  return 0;
}

static int interrupt_one_thread() {
  boost::thread bt([] {
    try {
      while (1) {
        boost::this_thread::sleep_for(boost::chrono::milliseconds(300));
        std::cout << "hello world\n";
      }
    } catch (const std::exception& e) {
      std::cerr << e.what() << '\n';
    } catch (const boost::thread_interrupted& e) {
      std::cerr << "thread interruped" << '\n';
    }
  });

  boost::this_thread::sleep_for(boost::chrono::milliseconds(1000));
  bt.interrupt();

  bt.join();
  boost::chrono::steady_clock::now();
  return 0;
}

TEST(test_boost, case_thread1) { ASSERT_EQ(make_one_thread(), 0); }

TEST(test_boost, case_thread2) { ASSERT_EQ(interrupt_one_thread(), 0); }

那么 我们的cmakelistst应该这样写,来将gtest和boost线程和时间库添加进去,boost其他非header-only库同理:

cmake_minimum_required(VERSION 3.6)

set(CMAKE_BUILD_TYPE Debug)

project(unit_test C CXX)

# 此处仅添加thread和chrono  你可以添加你需要的
find_package(Boost REQUIRED COMPONENTS thread chrono)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()

enable_testing()
find_package(GTest REQUIRED)

set(TEST_LIST
    boost_thread_test
)

foreach(src ${TEST_LIST})
	add_executable(${src}  ${src}.cc)
	target_link_libraries(${src} GTest::GTest GTest::Main Boost::thread Boost::chrono pthread)
	#也可以 target_link_libraries(${src} GTest::GTest GTest::Main boost_thread boost_chrono pthread)
	#也可以 target_link_libraries(${src} GTest::GTest GTest::Main ${Boost_THREAD_LIBRARY} ${Boost_CHRONO_LIBRARY} pthread)
	#甚至可以 target_link_libraries(${src} GTest::GTest GTest::Main ${Boost_LIBRARIES} pthread)
	add_test(${src} ${src})
endforeach()

测试一下这个测试用例:

mkdir build && cd build && cmake .. && make -j 
./boost_thread_test

结果:

Running main() from /build/googletest-OI1WhS/googletest-1.10.0.20201025/googletest/src/gtest_main.cc
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from test_boost
[ RUN      ] test_boost.case_thread1
hello world
[       OK ] test_boost.case_thread1 (0 ms)
[ RUN      ] test_boost.case_thread2
hello world
hello world
hello world
thread interruped
[       OK ] test_boost.case_thread2 (1001 ms)
[----------] 2 tests from test_boost (1001 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1003 ms total)
[  PASSED  ] 2 tests.

完美~ 顺带还介绍了如何使用gtest和cmake构建单元测试用例 ~~ nice

好了就这样吧 看了一圈国内好像没找到一篇文章好好说如何引用boost库的(大概我眼瞎),正好做一篇

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歪锅锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值