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,示例内容如下:

#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 @ 2022-03-27 01:05  Leyman  阅读(73)  评论(0编辑  收藏  举报