CMake: Eigen3包括第三个项目所需的dirs
CMake: Eigen3 include dirs needed from a third project
我已经实现了一个使用Eigen3的库。以下几行是这个库的CMake的一部分:
#EIGEN
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
找到了Eigen3,我的库编译没有任何问题。
当我在其他项目中使用我的库时,问题就出现了。这个项目与Eigen没有任何关系,它不在那里使用。但是,如果我没有在这个项目中包含Eigen include文件,它的编译就会失败。
我的库是作为一个动态库编译的,我猜其中缺少了一些Eigen的东西,这就是为什么项目也需要Eigen包含目录。知道怎么解决这个问题吗?
谢谢。
PS:我在Ubuntu 13.04和使用QtCreator作为IDE。
Eigen是一个只有头文件的库(除了一些blas绑定)。确保在使用库时不需要将Eigen作为构建时依赖项的唯一方法是仅在库的源文件中包含Eigen头文件,而在头文件中不包含Eigen头文件。这可能需要用PIMPL或其他类似的东西来包装特征类型和函数。
如果已经是这种情况,那么你的问题缺少信息。
正如@rubenvb所说,Eigen只是头部。但是,您可能还希望提供一些模板函数,在这种情况下,您需要将Eigen添加到其他项目的include目录中。此外,在某些时候,您可能有其他依赖项,无法像@rubenvb建议的那样隐藏。不过别担心!对于CMake项目,如果你为你的库生成一个pkg-config文件,你可以简单地使用:
find_package(PkgConfig)
pkg_check_modules(YourLib REQUIRED yourlib)
include_directories(${YourLib_INCLUDE_DIRS})
这对用户来说是透明的。任何其他依赖项也将同时处理。注意,库和定义也是可用的。这些在pkg_check_modules的CMake文档中都有解释。
在ROS节点的特殊情况下(您在编辑之前询问过),当您声明您的库是ROS节点的依赖项时,这些包含也可以使用catkin自动完成。欲了解更多信息,请查看catkin文档
如果你在你的头文件中包含了Eigen头文件,那么Eigen就是你的项目的一个公共依赖项。
http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html参见
http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html(尽管Eigen还没有创建导入的目标)
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 我有三个 getline,但是一旦编译,输入就太多了
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 有没有更好的方法对C++中的三个整数进行排序?
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 为什么 getch 在按下函数或箭头键时返回三个值?
- 使用三个数字比较器进行排序
- 我想在C++代码中比较这三个术语
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 在制作合并分类项目C 的第三个对象时,请堆叠溢出
- 有没有QPair类,但针对三个+项目而不是两个
- 对包含三个项目的数组进行排序
- 任何STL数据结构,如pair,提供三个项目(类型)而不是两个
- CMake: Eigen3包括第三个项目所需的dirs
- 在vc++ 2008中,三个级别的项目依赖关系导致不是所有的东西都链接在一起