簡體   English   中英

如何使用cmake正確配置boost測試

[英]How to properly configure boost test with cmake

Boost.Test是一個非常好的單元測試庫,但是當我嘗試在新項目中配置它時,這是一個很大的痛苦。

如何配置我的項目,使用cmake,使用具有以下要求的提升(這實際上是我在互聯網上找到的大多數收件人不喜歡的事項列表):

  • 我不想使用UTF的單頭變體(也就是說我不想包含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})

對此的Drawbaks是(據我所知set(Boost_USE_STATIC_LIBS ON)強制所有boost組件靜態鏈接,這可能是不合需要的。

您可以在項目中構建自己的boost UTF共享版本(靜態也可以)。

add_library(my_boost_test SHARED boost_test.cpp)

使用此boost_test.cpp

#include <boost/test/included/unit_test.hpp>

我用這個:

cmake_minimum_required(VERSION 2.8.11)

# disable auto link
add_definitions(-DBOOST_ALL_NO_LIB)

# link against dynamic libraries
add_definitions(-DBOOST_ALL_DYN_LINK)
find_package(Boost COMPONENTS system unit_test_framework)

作為加載boost.test庫之前的序言,它按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM