У меня есть следующая структура проекта:
utils
include
utils
image_utils.h
CMakelists.txt
package.xml
graph
src
graph.cpp
CMakelists.txt
package.xml
Я пытаюсь использовать image_utils.h
в graph.cpp
.
CMakelists
внутри utils выглядит так:
cmake_minimum_required(VERSION 3.0.2)
project(utils)
find_package(catkin REQUIRED COMPONENTS roscpp)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp
)
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_library(${PROJECT_NAME} INTERFACE)
target_link_libraries(${PROJECT_NAME} INTERFACE ${catkin_LIBRARIES} )
install(
DIRECTORY include/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
)
А на внутреннем графике CMakelists
я вызываю find_package(catkin REQUIRED COMPONENTS roscpp)
, как показано ниже:
cmake_minimum_required(VERSION 3.0.2)
project(pose_graph)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs cv_bridge utils)
find_package(OpenCV 3.4 REQUIRED)
include_directories(${catkin_INCLUDE_DIRS} )
catkin_package(CATKIN_DEPENDS utils)
add_executable(graph src/graph.cpp)
target_link_libraries(graph ${catkin_LIBRARIES} ${OpenCV_LIBS} utils)
package.xml
графика имеет следующий соответствующий тег:
<depend>utils</depend>
Мое сообщение об ошибке:
graph.cpp:12:10: fatal error: utils/image_utils.h: No such file or directory
#include "utils/image_utils.h"
^~~~~~~~~~~~~~~~~~~~~
Любая идея, что я делаю неправильно здесь?
Обычно я делаю add_library(...)
в utils
CMakeLists.txt, а затем связываю его с вашей pose_graph
целью. Но я не знаю, хочешь ли ты этого
@revision # 3: вам все еще нужно исправить репо. Конфигурация по-прежнему несовместима с ошибкой.
Как вы ожидаете, что проект графа узнает о проекте utils в вашем find_package(catkin REQUIRED COMPONENTS ... utils)
? Вы собрали и установили его и намекнули CMake, где вы его установили? Где вы его построили и куда вы его установили?
@user Я использовал catkin_package()
и install
в CMakelists
утилит. Все мои соответствующие файлы показаны выше. Если чего-то не хватает, подскажите, что добавить. Я не очень хорошо знаком с CMake.
Вы действительно выполнили шаг установки с помощью cmake --install ? Покажите команды, которые вы используете для настройки, сборки и установки проекта utils. И снова исправьте свой минимально воспроизводимый пример: сделайте конфиг и сообщение об ошибке согласованными.
@user Конфигурация и сообщение об ошибке совпадают. Может быть, вам следует прочитать заголовок моего поста и теги, которые я использую. Это проект РОС. cmake --install
не используется. Я использую сережку, чтобы построить его.
тогда покажи свои файлы package.xml.
@user обновлен единственной строкой, которая, по моему мнению, актуальна
большой. Однако, если вы действительно хотите помочь людям помочь вам, предоставьте реальный минимально воспроизводимый пример.
@user Я не вижу, чего еще не хватает. Вы хотите, чтобы я загрузил сюда весь свой проект?
@ignacio спасибо, это то, что я хочу. Однако я получил ошибку в своем заявлении включения, когда попробовал это: Can't find utils/image_utils.h
Вам нужно изменить структуру папок на utils/include/utils/image_utils.h
, а затем также добавить вызов add_library(...)
в свой файл CMakeLists.txt
.
Я пробовал это (обновил свой вопрос с деталями). Теперь я получаю ошибку graph.cpp:12:10: fatal error: utils/image_utils.h: No such file or directory #include "utils/image_utils.h"
используйте <utils/image_utils.h>
вместо "utils/image_utils.h"
, так как заголовок из внешнего пакета
все та же ошибка: fatal error: utils/image_utils.h: No such file or directory #include <utils/image_utils.h>
попробуйте вызвать include_directories(${catkin_INCLUDE_DIRS} )
после catkin_package(CATKIN_DEPENDS utils)
Извините, в каком CMakelists
файле это должно быть? Так как я никуда не звоню catkin_package(CATKIN_DEPENDS utils)
ты делаешь в pose_graph
Все та же проблема
Наконец-то разобрался. Вот мои CMakelists
файлы:
утилиты:
cmake_minimum_required(VERSION 3.0.2)
project(utils)
find_package(catkin REQUIRED COMPONENTS roscpp)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS roscpp
)
include_directories(
include
${catkin_INCLUDE_DIRS}
)
install(
DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
)
график:
cmake_minimum_required(VERSION 3.0.2)
project(pose_graph)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs cv_bridge utils)
find_package(OpenCV 3.4 REQUIRED)
catkin_package(CATKIN_DEPENDS utils)
include_directories(${catkin_INCLUDE_DIRS} )
add_executable(graph src/graph.cpp)
target_link_libraries(graph ${catkin_LIBRARIES} ${OpenCV_LIBS})
@user Нет файла CMakelists.txt верхнего уровня, но теперь я включил остальную часть CMakelists.txt из моего графического проекта.