Для проекта ROS мне нужен Boost 1.55, который в настоящее время несовместим для использования с ROS, поэтому я не могу установить его вместе с ROS. Поскольку компиляция ROS из источника не является вариантом, я хотел бы изменить каталог, в котором компилятор ищет Boost (вместо /usr/include/boost
только мой собственный каталог).
Итак, если у меня есть #include<boost/somefile.hpp>
, я бы хотел, чтобы он фактически включал [package_folder]/include/boost/somefile.hpp
; и это, конечно же, также нужно для всех #include
в самой библиотеке Boost. Есть ли простой способ сделать это (я думаю, что это должно быть сделано в файле CMakeLists.txt
)
Вот то, что я пробовал (в том числе и то, что предложил @русло)
set(BOOST_ROOT include/boost_1_55_0)
find_package(Boost 1.55.0)
Переменные статуса повышения указывают на то, что это хорошо, но тогда я все еще получаю
fatal error: boost/graph/successive_shortest_path_nonnegative_weights.hpp: No such file or directory
Итак, я перечислил все переменные cmake, которые указали на /usr/include/
и добавили мое местоположение Boost:
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}/include;/usr/include)
set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}/include;/usr/include)
set(GTEST_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include;/usr/include)
Но безрезультатно. Как получить rosmake
чтобы получить мой каталог?
Ответ был прост. Добавлено в CMakeLists.txt:
rosbuild_add_compile_flags(SingleImage "-std=c++0x")
include_directories(${PROJECT_SOURCE_DIR}/include/boost_1_55_0)
Который, очевидно, я пробовал раньше, но это не сработало из-за "грязной" сборки. Итак, всегда используйте rosmake yourpackage --target=clean
... узнал, что это трудный путь.
Просто измените переменную BOOST_ROOT:
cmake -DBOOST_ROOT =/ваш/boost/location... другие варианты...
set(BOOST_ROOT include/boost_1_55_0)
вам нужно установить полный путь здесьfind_package(Boost 1.55.0 REQUIRED)
если boost является обязательной библиотекой