使用Cmake编译升压测试
Compiling a boost test with Cmake
我正试图通过让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
)
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 用于交叉编译和CMake的预处理器宏的单元测试
- MinGw 无法从 cmake 编译测试文件
- C++代码以测试另一个.cpp如果可以编译它
- 提升 1.64 单元测试编译失败
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 在Raspbian上编译pybind11测试用例时出现致命错误
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 如何从测试脚本中运行WAF编译C++程序?
- 如何测试采用 std::initializer_list 的 ctor 具有编译时已知长度?
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 使用Mingw-w64编译Google测试
- Cmake无法在qt-creater/collect2上编译简单的测试程序:错误:ld
- Cxx测试编译,缺少主
- C++测试编译错误
- SDL测试编译期间出错
- 为什么谷歌测试编译,但不能看到我的项目来源
- Gtest:测试编译错误
- Boost 单元测试编译通过 Eclipse 失败