ros学习笔记(三)

1.自定义头文件调用

需求:设计头文件,可执行文件本身作为源文件。

流程:

  1. 编写头文件;

  2. 编写可执行文件(同时也是源文件);

  3. 编辑配置文件并执行。

1.1 头文件

在功能包下的 include/功能包名 目录下新建头文件: hello.h,示例内容如下:

复制代码
#ifndef _HelLO_H
#define _HELLO_H

namespace hello_ns
{
class Hello
{
public:
    void run();
};
}

#endif
复制代码

注意:

在 VScode 中,为了后续包含头文件时不抛出异常,配置 .vscode 下 c_cpp_properties.json 的 includepath属性

"/home/用户/工作空间/src/功能包/include/**"

1.2 源文件编写

在 src 目录下新建文件:hello.cpp,示例内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;     
}

1.3.配置文件

配置CMakeLists.txt文件,头文件相关配置如下:

 

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}
)

然后编译执行即可;

自定义源文件调用

需求:设计头文件与源文件,在可执行文件中包含头文件。

流程:

  1. 编写头文件;

  2. 编写源文件;

  3. 编写可执行文件;

  4. 编辑配置文件并执行。

2.1 头文件

在功能包下的 include/功能包名 目录下新建头文件: haha.h,示例内容如下:

复制代码
#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 ...");
}

}
复制代码

2.3.可执行文件

在 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;
}
复制代码

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中要同时包含和头文件相关的可执行文件与主函数的可执行文件

posted @   Leyman  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示