调用自定义源文件的时候需要配置cmakelists文件,刚学感觉还挺繁琐,用一个小案例记录一下。
1、随便写个头文件
在功能包的 include/功能包名 目录下创建一个头文件
记得在 .vscode 下 c_cpp_properties.json 的 includepath属性中把路径加进去
#ifndef _HELLO_H
#define _HELLO_H
namespace hello_ns{
class MyHello
{
public:
void run();
};
}
#endif
2、随便写个源文件
在src目录下建一个源文件hello_src.cpp
同样的记得在c_cpp_properties.json文件中配置路径
#include "ros/ros.h"
#include "plumbing_head/hello.h"
namespace hello_ns{
void MyHello::run(){
ROS_INFO("run函数执行");
}
}
3、随便写个可执行文件
在src目录下建一个hello.cpp
这里没有include hello_src.cpp,肯定关联不到
#include "ros/ros.h"
#include "plumbing_head/hello.h"
int main(int argc, char *argv[])
{
/* code */
setlocale(LC_ALL, "");
ros::init(argc,argv,"hello_head");
hello_ns::MyHello h;
h.run();
return 0;
}
4、配置文件
4.1 头文件和源文件配置
##1、指定头文件位置
include_directories(
include
${catkin_INCLUDE_DIRS}
)
##2、声明C++库
add_library(head_src ##给库起个名字
include/${PROJECT_NAME}/hello.h
src/hello_src.cpp
)
##3、添加可执行文件的cmake目标依赖项
add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
##4、指定要链接库或可执行目标的库
target_link_libraries(head_src
${catkin_LIBRARIES}
)
4.2 可执行文件配置
add_executable(hello src/hello.cpp)
add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
##需要把C++文件库加进来
target_link_libraries(hello
head_src
${catkin_LIBRARIES}
)