在cmake中设置Eigen3插件

时间:2019-04-05 11:44:07

标签: cmake compilation eigen3

我的目标是在cmake(3.0.2)中包含Eigen3(3.2.2)插件,并在代码中使用它们。

我尝试使用add_definitions()设置编译器定义,但似乎未包含在标头中。据cmake文档了解,编译器定义仅在源文件中“可见”,因此在标头中不可见。

这是我要包含在适当的.cmake中的CMakeLists.txt文件。

set(EIGEN_FUNCTORS_PLUGIN_PATH "grid_map_core/eigen_plugins/FunctorsPlugin.hpp")
if (EIGEN_FUNCTORS_PLUGIN)
  if (NOT EIGEN_FUNCTORS_PLUGIN STREQUAL EIGEN_FUNCTORS_PLUGIN_PATH)
    MESSAGE(FATAL_ERROR "EIGEN_FUNCTORS_PLUGIN already defined!")
  endif ()
else (EIGEN_FUNCTORS_PLUGIN)
  add_definitions(-DEIGEN_FUNCTORS_PLUGIN=\"${EIGEN_FUNCTORS_PLUGIN_PATH}\")
endif (EIGEN_FUNCTORS_PLUGIN)

set(EIGEN_DENSEBASE_PLUGIN_PATH "grid_map_core/eigen_plugins/DenseBasePlugin.hpp")
if (EIGEN_DENSEBASE_PLUGIN)
  if (NOT EIGEN_DENSEBASE_PLUGIN STREQUAL EIGEN_DENSEBASE_PLUGIN_PATH)
    MESSAGE(FATAL_ERROR "EIGEN_DENSEBASE_PLUGIN already defined!")
  endif ()
else (EIGEN_DENSEBASE_PLUGIN)
  add_definitions(-DEIGEN_DENSEBASE_PLUGIN=\"${EIGEN_DENSEBASE_PLUGIN_PATH}\")
endif (EIGEN_DENSEBASE_PLUGIN)

仅使用这些add_definitions()语句,编译器会给出一个错误,即找不到插件方法,因此在头文件中找不到定义,因为eigen在类的声明中包含了插件文件。

如果我在要直接使用插件的类中定义宏,如下所示,编译成功。

#define EIGEN_DENSEBASE_PLUGIN "grid_map_core/eigen_plugins/DenseBasePlugin.hpp"
#define EIGEN_FUNCTORS_PLUGIN "grid_map_core/eigen_plugins/FunctorsPlugin.hpp"

完整的代码可以在我的github仓库中找到:https://github.com/BeatScherrer/grid_map/

我的问题是cmake中是否有一种方法不仅可以为.src文件定义编译定义,还可以为标头定义编译定义,因此我可以直接在cmake中设置本征插件,而不是为此相当难看的手动定义。< / p>

很有趣:如果您使用catkin构建原始库,则不会出现此类错误,而且我不太确定自己缺少什么。

0 个答案:

没有答案