【问题标题】:How do I configure the way a project is built in CLion?如何配置项目在 CLion 中的构建方式?
【发布时间】:2018-08-13 23:44:21
【问题描述】:

问题如下。

我已经通过 apt 实用程序在我的 Ubuntu 发行版上安装了 libarmadillo,之前安装了 liblapack 和 libblas。我正在尝试在我的 CLion 项目中使用它。我的意图导致我收到一些构建错误。其中之一是通过添加#define ARMA_DONT_USE_WRAPPER 解决的。

我已经找到了在这个主题中构建我的项目的方法 - Armadillo + BLAS + LAPACK: Linking error?。不过,我只能用终端来构建它。我认为 CLion 的问题是 CMake 配置。

我有什么方法可以更改 CMake 脚本,以便改进其构建行为并使其编译我的项目?

简单来说,我如何让它用g++ main.cpp -o lab2 -O1 -llapack -lblas编译我的程序。

代码示例:

#define ARMA_DONT_USE_WRAPPER
#define ARMA_USE_BLAS
#define ARMA_USE_LAPACK
#include <armadillo>
#include <iostream>
using namespace arma;
using namespace std;

int main() {
mat A(4, 5);
A.load("matrix.txt");
mat B = resize(A, 4, 4);
cout << norm(A, 2);
cout << B;
return 0;
}

我收到的错误:

CMakeFiles/lab2.dir/main.cpp.o: In function `double 
arma::blas::asum<double>(unsigned long long, double const*)':
/usr/include/armadillo_bits/wrapper_blas.hpp:241: undefined reference 
to `dasum_'
CMakeFiles/lab2.dir/main.cpp.o: In function `double 
arma::blas::nrm2<double>(unsigned long long, double const*)':
/usr/include/armadillo_bits/wrapper_blas.hpp:273: undefined reference 
to `dnrm2_'
collect2: error: ld returned 1 exit status
CMakeFiles/lab2.dir/build.make:94: recipe for target 'lab2' failed
make[3]: *** [lab2] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/lab2.dir/all' 
failed
make[2]: *** [CMakeFiles/lab2.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/lab2.dir/rule' 
failed
make[1]: *** [CMakeFiles/lab2.dir/rule] Error 2
Makefile:118: recipe for target 'lab2' failed
make: *** [lab2] Error 2

CMakeLists.txt:

cmake_minimum_required(VERSION 3.9)
project(lab2)

set(CMAKE_CXX_STANDARD 11)

add_executable(lab2 main.cpp)

【问题讨论】:

  • 在设置中,在c++构建工具下,您可以设置命令行选项和环境变量,以便在调用cmake时使用。
  • 看不到你的CMakeLists.txt很难说,你能发一下吗?
  • @thomas_f 是的,但实际上并没有太多内容(我编辑了我的问题)

标签: c++ compilation cmake clion


【解决方案1】:

您首先需要 CMake 函数来查找库 liblapack 和 libblas。 对于这两种功能,标准 cmake 发行版中已经有功能,所以

find_package(需要 BLAS) find_package(需要 LAPACK) find_package(需要犰狳)

请参阅 cmake 模块目录中的 FindBLAS.cmake 和 FindLAPACK.cmake 以了解它们定义的变量。

然后将它们添加到您的目标中,例如:

目标链接库(实验室 2 ${LAPACK_LIBRARIES} ${BLAS_LIBARIES} ${ARMADILLO_LIBRARIES})

【讨论】:

    【解决方案2】:

    正如@Richard Hodges 在评论中所说,在“设置”中,您可以设置提供给 CMake 的变量以及定义环境变量。

    我还喜欢添加一个自定义 CMake 脚本来轻松调整配置;例如添加你的CMakeLists.txt:

    include(local.cmake OPTIONAL)
    

    这样,您可以将任何您想要的 CMake 配置放在源目录中的 local.cmake 中,它将被解析。如果文件不存在,则不会发生任何事情。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多