如何使用 cmake 正确配置升压测试
How to properly configure boost test with cmake
Boost.Test是一个非常好的单元测试库,但是当我尝试在新项目中配置它时,这是一个很大的痛苦。
如何配置我的项目,使用 cmake,以使用以下要求使用 boost(这实际上是我在互联网上找到的大多数食谱中不喜欢的东西的列表):
- 我不想使用 UTF 的单标头变体(也就是说我不想包含
boost/test/included/unit_test.hpp
)。这样做的理由是它减慢了编译和 IDE 的速度。 - 我真的不想编写一个
main
函数——除非它是一个单行(我没有找到任何复制粘贴方法来定义 main 函数)。因此,除非你能提供这样的主代码段,否则这意味着Boost.Test是静态链接的。 - 我不想静态地包含每个(通过
-static
gcc 开关)。我也不想静态编译每个提升组件。 - 我不想在我的 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)
强制所有升压组件静态链接,这可能是不可取的。
我使用这个:
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 库之前的序言,它按预期工作。
您可以在项目中构建自己的共享版本的 boost UTF(静态也可以)。
add_library(my_boost_test SHARED boost_test.cpp)
有了这个boost_test.cpp
:
#include <boost/test/included/unit_test.hpp>
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 无法找到/读取配置文件.conf-FileIOException
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如何将我的 CMake 项目配置为运行所有单元测试?
- GTEST单元测试目标配置文件路径
- 在 Travis CI 上运行 C++ 测试时出现问题.Cmake 配置.如何在特拉维斯 ci 上运行测试套件?
- 用Xcode 4配置谷歌测试的正确方法是什么
- 如何使用 cmake 正确配置升压测试
- 正在为DLL库配置Google测试项目
- 提振.测试-从同一项目的不同构建配置中区分测试结果
- 配置gtest仅在控制台中显示失败的测试