Настройка плагинов Eigen3 в cmake - PullRequest
0 голосов
/ 05 апреля 2019

Моя цель - включить плагины Eigen3 (3.2.2) в cmake (3.0.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 напрямую?этого довольно уродливого определения вручнуюНет такой ошибки, и я не совсем уверен, что мне не хватает.

...