目录
本文主要介绍ROS的C++实现,如何使用头文件和源文件的方式封装代码,具体内容如下:
- 设置头文件,可执行文件作为源文件
- 分别设置头文件,源文件与可执行文件
在ROS中关于头文件的使用,核心内容在于CMakeLists.txt文件的配置,不同的封装方式,配置上面也有差异。
自定义头文件的调用
需求:设计头文件,可执行文件本身作为源文件
流程:
- 编写头文件
- 编写可执行文件(同时也是源文件)
- 编辑配置文件并执行
头文件
在功能包下的Include/功能包名 目录下新建头文件:hello.h,示例内容如下:
#ifndef _HELLO_H
#define _HELLO_H
namespace hello_ns{
class HelloPub{
pubilc:
void run();
}
}
#endif
注意:在VScode中,为了后续包含头文件时不抛出异常,请配置.vscode下c_cpp_properties.json的include path属性
"/home/用户/工作空间/src/功能包/include/**"
可执行文件
在src目录下新建文件:hello.cpp,示例内容如下:
#include ”ros/ros.h“
#include "test_head/hello.h"
namespace hello_ns{
void HelloPub::run(){
ROS_INFO("自定义头文件的使用....");
}
}
int main(int argc,char *argv{}){
setlocale(LC_ALL,"");
ros::init(argc,argv,"test_head_node");
hello_ns::HelloPub helloPub;
helloPub.run();
return 0;
}
配置文件
配置CMakeLists.txt文件,头文件的相关配置如下:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
可执行配置文件配置方式与之前一致
add_exectable(hello src/hello.cpp)
add_dependencies(hello ${${PROJECT_NAME}_EXPORT_TARGETS}${catkin_EXPORT_TARGETS})
target_link_libraries(hello ${catkin_LIBRARIES})
最后编译执行,控制台输出自定义文本信息
自定义源文件的调用
需求:设计头文件与源文件,在可执行文件中包含头文件
流程:
- 编写头文件
- 编写源文件
- 编写可执行文件
- 编辑配置文件并执行
头文件
头文件和之前的类似,在功能包的include/功能包名 目录下新建头文件:haha.h,示例如下:
#ifndef _HAHA_H
#define _HAHA_Hnamespace hello_ns {
class My {
public:
void run();};
}
#endif
注意;在VScode中,为了后续包含头文件的时不抛出异常,请配置.vscode下c_cpp_properties.json的include path属性
"/home/用户/工作空间/src/功能包/include/**"
源文件
src目录下新建文件:haha.cpp,示例如下:
#include "test_head_src/haha.h"
#include "ros/ros.h"namespace hello_ns{
void My::run(){
ROS_INFO("hello,head and src ...");
}}
可执行文件
在 src 目录下新建文件: use_head.cpp,示例内容如下:
#include "ros/ros.h"
#include "test_head_src/haha.h"
int main(int argc, char *argv[])
{
ros::init(argc,argv,"hahah");
hello_ns::My my;
my.run();
return 0;
}
配置文件
头文件与源文件相关配置:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
## 声明C++库
add_library(head
include/test_head_src/haha.h
src/haha.cpp
)
add_dependencies(head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(head
${catkin_LIBRARIES}
)
Copy
可执行文件配置:
add_executable(use_head src/use_head.cpp)
add_dependencies(use_head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
#此处需要添加之前设置的 head 库
target_link_libraries(use_head
head
${catkin_LIBRARIES}
)