Boost.Test是一个非常好的单元测试库,但总是当我尝试在新项目中配置它时,这是一个很大的痛苦。
如何配置我的项目,使用cmake,使用具有以下要求的提升(这实际上是我在互联网上找到的大多数收件人不喜欢的事项列表):
boost/test/included/unit_test.hpp
)。这样做的理由是它会降低编译和IDE的速度。 main
函数 - 除非它是一个单行(我没有找到任何复制粘贴方式来定义主函数)。所以除非你能提供这样的主要片段,否则这意味着Boost.Test是静态链接的。 -static
gcc开关)。我也不想静态编译每个boost组件。 所以这里是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)
答案 0 :(得分:1)
实际上我没有找到满足我需要的任何具体解决方案,但这里有两个部分解决方案,大部分都可以。
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组件静态链接,这可能是不可取的。
答案 1 :(得分:1)
您可以在项目中构建自己的boost UTF共享版本(静态也可以)。
add_library(my_boost_test SHARED boost_test.cpp)
使用此boost_test.cpp
:
#include <boost/test/included/unit_test.hpp>
答案 2 :(得分:1)
我用这个:
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库之前的序言,它按预期工作。