1、自定义头文件
如果在功能包下面的include下创建了自定义的.h文件,在配置CMakeLists时需要把下面代码的注释解开;
include_directories(
include
${catkin_INCLUDE_DIRS}
)
2、自定义源文件
如果功能包的src下有多个cpp文件,但是想在一个节点下运行,一共有两种方法,自我感觉下面的方法1比较简单,
${PROJECT_NAME}:表示以包名生成的一个名字;${PROJECT_SOURCE_DIR}:表示该包所在的文件夹,
方法1
add_executable(${PROJECT_NAME}_node src/hello.cpp src/use_hello.cpp)
直接将src下的多个cpp文件都添加进该命令行,然后将下面代码的注释给解开即可
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)
如果有用到其他包里的源文件,也可以直接添加到可执行命令行,下面这行命令的意思是获取该包所在上级目录toollib的src下的源文件,打包给SRC_LIST,并按下面的命令添加到可执行文件,即可。
aux_source_directory(${PROJECT_SOURCE_DIR}/../toollib/src SRC_LIST)
add_executable(${PROJECT_NAME}_node src/hello.cpp src/use_hello.cpp
${SRC_LIST}
)
方法2(仅测试有两个cpp文件)
添加c++配置文件(main函数的执行要依赖于这个文件)
add_library(head_src
include/${PROJECT_NAME}/hello.h
src/hello.cpp
)
head_src是自定义的,然后依次添加头文件、源文件,
然后添加可执行文件,可执行文件只添加有main函数的cpp文件,
add_executable(use_hello src/use_hello.cpp)
use_hello名字是自定义的,当然也可以用默认的,这个名字是运行时的节点名,它要与target_link_libraries里的${PROJECT_NAME}_node相对应,一个地方改了,另一个地方也要改。
然后是配置target_link_libraries,如下:use_hello是main函数的cpp文件,它的执行依赖于head_src
target_link_libraries(head_src
${catkin_LIBRARIES}
)
target_link_libraries(use_hello
head_src
${catkin_LIBRARIES}
)
3、让一个包里src下不同的cpp文件分别生成不同的运行节点
配置CMakeLists时,在添加可执行文件行,给不同的cpp文件分别起上不同的名字,然后在target_link_libraries也分别对应上相应的名字即可。
add_executable(haha01 src/haha01.cpp )
add_executable(hear01 src/hear01.cpp )
add_executable(person_pub src/demo03.cpp )
add_executable(person_sub src/demo04.cpp )
target_link_libraries(haha01
${catkin_LIBRARIES}
)
target_link_libraries(hear01
${catkin_LIBRARIES}
)
target_link_libraries(person_pub
${catkin_LIBRARIES}
)
target_link_libraries(person_sub
${catkin_LIBRARIES}
)
以上仅供参考,欢迎交流学习。