创建并编译基类以在其他 C++ 项目 (ROS) 中使用
Create and compile a base class to use in other c++ projects (ROS)
我想编译一个项目,以便能够将其用作其他项目中的库。更准确地说,它是一个基类,我希望我用来继承许多其他项目。
├── 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}
)
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 您将如何在现有的QT Creator GUI项目中实现ROS发布者和订阅者?
- 创建并编译基类以在其他 C++ 项目 (ROS) 中使用
- ROS C++项目"include"文件夹?