生成静态库
ROS编程中需要把一些关键的类进行封装,供其他工程调用,这里使用cmake生成静态库.a,供其他程序调用。下面提供cmakelist里面的写法:
如果封装的库里面引用类第三方库,那么需要加入
find_package(Boost REQUIRED COMPONENTS system)
find_package(PCL REQUIRED QUIET)
除了必要的指令,如find_package,大体还需要三步
1.#添加头文件的搜索路径
# 添加头文件搜索路径
同样,这里包含了第三方库:
include_directories(include #本工程
${catkin_INCLUDE_DIRS} #使用的第三方库
${Boost_INCLUDE_DIR}
${PCL_INCLUDE_DIR}
)
2.# 生成库
生成库主要是用到类要包含add_library指令,包含 要生成的名字 动/静态库 源文件(cxx),可以把每个类单独打包,也可以把几个类打包到同一个静态库中,下面是几个类一块打包:
add_library( com_lib(1.生成库名字) STATIC (2.静态库,动态库应该是SHARED)
#3.三个类a b c
${PROJECT_SOURCE_DIR}/src/a/a.cc
${PROJECT_SOURCE_DIR}/src/b/b.cpp
${PROJECT_SOURCE_DIR}/src/c/c.cpp
)
3.#添加需要的第三方库
静态库里往往需要一些第三方库,这里需要链接一下,静态库需要的第三方库
target_link_libraries( com_lib ${Boost_LIBRARIES}#静态库需要的第三方库
${GFLAGS_LIBRARY}
${PCL_LIBRARIES}
${THIRD_PARTY_LIBS}
)
执行catkin_make,ROS生成库的目录是在/devel/lib/里。
使用静态库
在这里费了一大把力气,翻阅了很多博客也没有找到答案,最后偶然了解到,静态库的位置指定使用的是link_directories(${PROJECT_SOURCE_DIR}/lib)指令,我把库放在了项目目录下的lib里面,下面是导入使用的办法:
link_directories(${PROJECT_SOURCE_DIR}/lib)#指定静态库的目录地址!!
add_executable(${PROJECT_NAME}_node #可执行文件
${PROJECT_NAME}_node.cpp
src/project.cpp)
target_link_libraries(${PROJECT_NAME}_node #将库链接到可执行文件中
com_lib
)
#依赖
add_dependencies(${PROJECT_NAME}_node ${PROJECT_NAME}_generate_messages_cpp ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
版权声明:本文为u010647296原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。