ros学习笔记(三)
1.自定义头文件调用
流程:
-
编写头文件;
-
编写可执行文件(同时也是源文件);
-
1.1 头文件
在功能包下的 include/功能包名 目录下新建头文件: hello.h,示例内容如下:
#ifndef _HelLO_H #define _HELLO_H namespace hello_ns { class Hello { public: void run(); }; } #endif
"/home/用户/工作空间/src/功能包/include/**"
1.2 源文件编写
在 src 目录下新建文件:hello.cpp,示例内容如下:
#include "ros/ros.h" #include "功能包名/hello.h" namespace hello_ns { void Hello::run() { ROS_INFO("hello"); } } int main(int argc,char *argv[]) { ros::init(argc,argv,"hello"); hello_ns::Hello hello; hello.run(); return 0; }
include_directories(
include
${catkin_INCLUDE_DIRS}
)
配置可执行文件
add_executable(hello src/hello.cpp)
add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(hello
${catkin_LIBRARIES}
)
然后编译执行即可;
2
流程:
-
编写头文件;
-
编写源文件;
-
编写可执行文件;
-
#ifndef _HAHA_H #define _HAHA_H namespace hello_ns { class My { public: void run(); }; }
同样的配置 .vscode 下 c_cpp_properties.json 的 includepath属性
2.2 源文件
在 src 目录下新建文件:haha.cpp,示例内容如下:
#include "功能包名/haha.h" #include "ros/ros.h" namespace hello_ns{ void My::run(){ ROS_INFO("hello,head and src ..."); } }
#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; }
2.4 配置文件
头文件与源文件相关配置:
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} )
可执行文件配置:
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}
)
注意:配置可执行文件时,target_link_libraries中要同时包含和头文件相关的可执行文件与主函数的可执行文件