ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-10-13 22:16:08  阅读:389  来源: 互联网

标签:c eigen cmake


我在CMake项目中使用仅标头库(Eigen)时遇到困难.当我摘下所有与Eigen库相关的部分时,它将进行编译,但不确定如何使用(Eigen)进行构建.请注意,Eigen在Eigen文件夹中有一个CmakeLists.txt文件,并且它的/ src文件夹中有(* .h和* .cpp)与Matrix操作等有关.

我程序的结构如下

Myproject(文件夹)由:

> CmakeLists.txt
> /构建
> /来源

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.既然您没有构建本征,就可以删除该行

TARGET_INCLUDE_DIRECTORIES(Eigen ...

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

标签:c,eigen,cmake
来源: https://codeday.me/bug/20191013/1910881.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有