微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Windows的CMakelist.txt中包含本征库

如何解决如何在Windows的CMakelist.txt中包含本征库

我正在尝试将Eigen库包含到我的CMakelist.txt中。我已经遵循了Eigen Docs上的CMake说明,但是我使用的是Jetbrain的Clion,而不是直接使用CMake。所以我不知道如何使用提供的Cmake命令。我已经进行了研究,但是我对CMake并不十分了解编写Cmakelist,所以我还无法使任何东西正常工作。

这就是我一直用来测试库的serup的内容

cmake_minimum_required(VERSION 3.17)
project(Eigen_Test)
set(CMAKE_CXX_STANDARD 20)

find_package (Eigen3 3.3 required NO_MODULE)

add_executable (example example.cpp)
target_link_libraries (example eigen)

add_executable(Eigen_Test main.cpp)

这是我收到的错误

  CMake Error at CMakeLists.txt:5 (find_package):
      Could not find a package configuration file provided by "Eigen3" (requested
      version 3.3) with any of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK,be sure it has been installed.

我研究了很多方法来包含库,但是大多数方法都使用我不熟悉的命令行。另外,我没有Eigen3Config.cmake是唯一的Eigen3Config.cmake.in文件。我假设有一些我不应该知道的安装技巧。如果有人可以使用CMakelist.txt严格包含clion,我将不胜感激。

解决方法

这是一个在 Windows 上使用带有 mingw32-make.exe 和 g++.exe 编译器的 MinGW 环境的 CMake 工作示例。

CMakeLists.txt :

# The following lines depends on your project :
cmake_minimum_required(VERSION 3.19)
project(PROJECT_NAME)
set(CMAKE_CXX_STANDARD 17)

# You have to set these variables as Windows environment variables:
# EIGEN3_INCLUDE_DIR <- %EIGEN3_ROOT%
# EIGEN3_DIR <- %EIGEN3_ROOT%\cmake
#
# EIGEN3_INCLUDE_DIR: variable needed for file %EIGEN3_ROOT%/cmake/FindEigen3.cmake
#
# CMAKE_MODULE_PATH: Search path for the module Eigen3 to be loaded by find_package
#
SET( EIGEN3_INCLUDE_DIR "$ENV{EIGEN3_INCLUDE_DIR}" )
SET( CMAKE_MODULE_PATH "$ENV{EIGEN3_DIR}" )

find_package( Eigen3 3.3 REQUIRED )
# include_directories is needed for the compiler to know where looking for Eigen3 header files to be included 
include_directories( ${EIGEN3_INCLUDE_DIR} )

add_executable(PROJECT_NAME FILES...)

然后您可以调用 Eigen3 库,例如:

#include <Eigen/Core>
,

Eigen是仅标头的库,因此您不必将其添加到target_link_library,并且不需要CMake宏即可检测到它。

相反,只需将头文件添加到包含路径中,就应该设置好了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。