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