链接库CMake

时间:2017-11-08 19:36:21

标签: c++ unit-testing cmake

我不确定标题是否正确,但无论如何:

我正在用boosteigen3库编写项目,我想进一步测试CMake。到目前为止,我已将所有内容写入一个.cpp文件中,标题如下:

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <iostream>
#include "eigen/Eigen/Dense"

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Hello
#include <boost/test/unit_test.hpp>

#include <cmath>
#include <boost/timer/timer.hpp>
#include <fstream>

此外,我在我的&#34; main&#34;中添加了一些增强单元测试。以下列方式运作

BOOST_AUTO_TEST_CASE(universeInOrder)
{
  Eigen::Matrix3d m;
  m << 0, 1, 2,  
       3, 4, 5,
       6, 7, 8;
  BOOST_CHECK(Min(m) == 1);
}

其中Min是返回最低coeff的单独函数。矩阵 在我的目录中,我有FindEigen3.CMakeFindBoost.CMake个文件。我还有CMakeLists.txt文件,代码为:

cmake_minimum_required (VERSION 3.0)
project (hello)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
add_executable (hello hello.cpp)
target_link_libraries (hello Eigen3::Eigen)

enable_testing()

我正在跑步

mkdir build
cd build
cmake ..

并且没有错误,一切正常。

要运行我使用的程序

g++ -I /home/fdhd/Documents/boost/ file-name.cpp -lboost_unit_test_framework -lboost_timer -o file-name

这是我的问题 - 我可以避免在上面的命令中链接boost并插入CMakeLists.txt文件并运行 g++ file-name.cpp, 所以它会起作用,因为一切都在CMakeLists文件中?

有什么想法吗?我认为解决方案必须落后,但我无法真正看到它。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

要运行我使用的程序

Nop,这不是运行/测试程序的cmake惯用方法。由于您有 enable_testing(),因此cmake已经有一个自定义目标供您运行二进制文件。根据CTest wiki,您需要的是在CMakeLists.txt中添加 add_test 功能后输入make test。或多或少是这样的:

cmake_minimum_required (VERSION 3.0)
project (hello)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
add_executable (hello hello.cpp)
target_link_libraries (hello Eigen3::Eigen)

enable_testing()

add_test(test hello)