目录

自定义头文件的调用
头文件
可执行文件
配置文件
自定义源文件的调用
头文件
源文件
可执行文件
 配置文件
头文件与源文件相关配置
可执行文件配置


本文主要介绍ROS的C++实现,如何使用头文件和源文件的方式封装代码,具体内容如下:

  1. 设置头文件,可执行文件作为源文件
  2. 分别设置头文件,源文件与可执行文件

在ROS中关于头文件的使用,核心内容在于CMakeLists.txt文件的配置,不同的封装方式,配置上面也有差异。

自定义头文件的调用

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

流程:

  1. 编写头文件
  2. 编写可执行文件(同时也是源文件)
  3. 编辑配置文件并执行

头文件

在功能包下的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})

最后编译执行,控制台输出自定义文本信息

自定义源文件的调用

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

流程:

  1. 编写头文件
  2. 编写源文件
  3. 编写可执行文件
  4. 编辑配置文件并执行

头文件

头文件和之前的类似,在功能包的include/功能包名 目录下新建头文件:haha.h,示例如下:

#ifndef _HAHA_H
#define _HAHA_H

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