除了常规C++添加头文件的操作外,还需要:
1.将cpp文件添加到src/lib文件夹里,避免和定义结点的cpp文件在同一文件层级;
2.在src/lib文件夹里编写CmakeList.txt文件,包含该lib的名称,库文件名,以及关联库
此处lib名称为rec,包含了cluster.cpp源码,链接了catkin和PCL库
3.在功能包内的CmakeList.txt中添加子文件路径,add_subdirectory(src/lib)
如下图第78行,
并添加对rec库的依赖,如第82行,在末尾加入rec:
target_link_libraries(recog ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${PCL_LIBRARIES} rec )
4.最终功能包内文件结构如下图
re为功能包名,include为头文件库,src中保存所有源码文件,src/lib保存include对应的cpp库文件,src/lib中含有一个CmakeList.txt文件,定义lib的名称等信息,功能包内的CmakeList.txt文件定义功能包编译方法。
未能正确包含库文件可能的报错:
-
CMake Error: The source directory …does not appear to contain CMakeLists.txt
没有在src/lib文件夹添加CmakeList.txt文件 -
ld returned 1 exit status
出现该问题是因为CmakeList.txt没有定义好,本文上述流程没有完成,导致main.cpp或者node.cpp文件根据编译规则(CmakeList.txt)找不到库cpp文件
该问题发生时,将cpp库文件中的引用修改为错误状态不会引起报错,因为该文件没有被包括到编译范围内。