创建并编译基类以在其他 C++ 项目 (ROS) 中使用

Create and compile a base class to use in other c++ projects (ROS)

本文关键字:ROS 项目 C++ 编译 基类 其他 创建      更新时间:2023-10-16

我想编译一个项目,以便能够将其用作其他项目中的库。更准确地说,它是一个基类,我希望我用来继承许多其他项目。

├── include
│   ├── MyBase.hpp
│   ├── ...
│   └── Utils.hpp
└── src
    ├── MyBase.cpp
    ├── ...
    └── Utils.cpp

在我按照教程并调整了我的CMakeLists.txt文件之后,现在它看起来像这样。

cmake_minimum_required(VERSION 2.8.3)
project(my_commons)
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")

find_package(catkin REQUIRED COMPONENTS
roscpp
tf
)
catkin_package(CATKIN_DEPENDS tf
               INCLUDE_DIRS include)

include_directories(
  ${catkin_INCLUDE_DIRS}
   include/
)
###########
## Build ##
###########
add_library(my_commons SHARED
src/MyBase.cpp
src/Utils.cpp
)
## Specify libraries to link a library or executable target against
set_target_properties(my_commons PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(my_commons
                        ${catkin_LIBRARIES}
                        ${roscpp_LIBRARIES}
)

install(DIRECTORY include/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
  FILES_MATCHING PATTERN "*.hpp"
  PATTERN ".svn" EXCLUDE)

# Install library
install(TARGETS my_commons
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

它编译得很好,但我不确定需要在其他项目的 CMakeFiles 中添加什么以及如何在那里使用它。

提前非常感谢你。

在上面包含的 CMakeLists.txt 文件中,您需要在catkin_package中添加库行,如下所示:

catkin_package(
  INCLUDE_DIRS include 
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS  tf
)

然后在其他节点中,您将包包含在包中.xml:

<build_depend>my_commons</build_depend>

在 CMakeLists.txt 文件中,您需要找到my_commons包,并通过执行以下操作将其链接到您尝试构建的库或可执行文件:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  my_commons
)
catkin_package(
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS my_commons
)
target_link_libraries(${PROJECT_NAME}
  ${my_commons_LIBRARIES}
)