c++ - 在我的 Cmake 项目中使用 Eigen Lib?

标签 c++ cmake eigen

我在 CMake 项目中使用仅 header 库 (Eigen) 时遇到困难。当我删除与 Eigen 库相关的所有部分时,它会编译,但不确定如何使用 (Eigen) 构建。请注意,Eigen 在 Eigen 文件夹中有一个 CmakeLists.txt,它有/src 文件夹,其中包含与矩阵操作等相关的(*.h 和 *.cpp)...

我的程序结构如下

我的项目(文件夹)由:

  • CmakeLists.txt
  • / build
  • /来源

Source 文件夹有一堆我的文件(*.h 和 *.cpp)和/Eigen(文件夹)。

我所做的是:

FIND_PACKAGE(PkgConfig REQUIRED)
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0)
LIST(APPEND CMAKE_CXX_FLAGS 
    "-std=c++0x
     -pthread 
     ${CMAKE_CXX_FLAGS} 
     -g 
    -Wall -Wextra ")

ADD_LIBRARY(Eigen ${CMAKE_SOURCE_DIR}/Eigen)
TARGET_INCLUDE_DIRECTORIES(Eigen INTERFACE
 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 $<INSTALL_INTERFACE:include/Eigen>
)

INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
ADD_DEFINITIONS(${GTK3_CFLAGS_OTHERS})
INCLUDE_DIRECTORIES(include)
ADD_LIBRARY(RTT 
        Def.cpp 
        Def.h       
        krnel.cpp 
        krnel.h 
        Mesh.cpp 
        Mesh.h 
        Mcom.cpp 
        Mcom.h 
        timer.h 
        Identifier.h)       

ADD_EXECUTABLE(Rdrtst main.cpp)
TARGET_LINK_LIBRARIES(Rdrtst RTT ${GTK3_LIBRARIES} Eigen)

当我 cd 到/Build 并输入 (Cmake ../Source )

我得到以下信息:

[/../Build]$ cmake ../Source
-- Configuring done
CMake Error: Cannot determine link language for target "Eigen".
CMake Error: CMake can not determine linker language for target:Eigen
-- Generating done
-- Build files have been written to: /../../MyProject/Build

eigen 文件夹中有 CMakeLists.txt,内容如下:

include(RegexUtils)
test_escape_string_as_regex()

file(GLOB Eigen_directory_files "*")

escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")

foreach(f ${Eigen_directory_files})
  if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src")
    list(APPEND Eigen_directory_files_to_install ${f})
  endif()
endforeach(f ${Eigen_directory_files})

install(FILES
  ${Eigen_directory_files_to_install}
  DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel
  )

add_subdirectory(src)

最佳答案

您正在尝试将 Eigen 作为已编译的库包含在内。但是,正如您所说,Eigen 实际上只是一个头文件库,不需要编译,只需included。 .根本不应该有 .cpp 文件。

删除行

ADD_LIBRARY(Eigen ${CMAKE_SOURCE_DIR}/Eigen)

因为这意味着 static or shared libraries .现在您不构建 Eigen,您可以删除该行

TARGET_INCLUDE_DIRECTORIES(Eigen ...

Eigen CMakeLists 文件实际上只是将 Eigen 头文件复制到一个包含目录,并不编译任何内容。参见 this有关如何将 Eigen 与 CMake 结合使用的示例的链接。

关于c++ - 在我的 Cmake 项目中使用 Eigen Lib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28267104/

相关文章:

c++ - 比较 std::string_view 和子字符串 string_view

c++ - 在 Python 中制作 Qt/C++ 原型(prototype)

cmake 更改 clion 中的构建目录

c++ - 为什么 Eigen 在下面的例子中比 ublas 慢 5 倍?

c++ - 在 EIGEN 中,c++ 不能将 vector 乘以它的转置

c++ - 在我的程序中使用 for_each_process() 阻止我编译,编译器说需要分号?

android - CMake IF 条件返回错误结果

c++ - 当包含 boost/beast/http.hpp 时,CMake 出现多个错误

c++ - Eigen 和动态分配

c++ - 我可以从 STA dll 运行 QT 或 wxWidgets GUI 吗?