【问题标题】:Linking libraries CMake链接库 CMake
【发布时间】:2017-11-08 19:36:20
【问题描述】:

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

我正在使用 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>

我还通过以下方式在“主”函数中添加了一些增强单元测试

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

其中Min 是一个返回最低系数的单独函数。的矩阵。 在我的目录中,我同时拥有 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文件中?

有什么想法吗?我认为解决方案一定是在拐角处,但我看不到。

谢谢!

【问题讨论】:

  • “要运行我使用的程序...”等等,CMake 不是已经为你做了吗??
  • 说实话我不确定,如果是的话我以后如何“运行”程序?
  • 这可能被认为是愚蠢的,但我有点迷茫
  • 您发布的命令行,不运行程序,而是调用编译器编译file-name.cpp并将其链接为可执行目标。要调用可执行文件,只需在创建它的目录中键入./file-name
  • 您没有正确使用 cmake - cmake 生成(以及其他)makefile,这意味着您键入 make,而不是 g++ ... 来构建程序

标签: c++ unit-testing cmake


【解决方案1】:

运行我使用的程序

不,这不是运行/测试程序的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多