CMakeLists.txt install
本部分是关于ros CMakeLists.txt install :可参考http://wiki.ros.org/catkin/CMakeLists.txt
1.CMakeLists.txt中的install规则之前的构建时间完成之后,目标将会放在catkin空间的devel空间之下.然而,通常我们想把目标安装到系统里面(关于安装路径的信息在REP 122中找到),以便可以由其他人来使用或者可以在一个局部文件中用于系统安装层面的测试.换句话说,如果想要"make install"你的代码,那么就需要指定目标安装在哪儿.
以上的完成都是通过CMake install()函数来实现,下面是install函数的一些参数:
1)TARGETS 哪一个目标将要被安装.
2)ARCHIVE DESTINATION 静态库以及DLL(Windows).lib
3)LIBRARY DESTINATION 非-DLL共享库以及模块(modules)
4)RUNTIME DESTINATION 可执行目标以及DLL(Windows)格式的共享库
以共享库作为例子:

install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
可执行文件的例子:

install(TARGETS ${PROJECT_NAME}_node
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
除了这些标准的目标之外,一些文件必须安装到指定的文件夹.例如:a library containing Python bindings must be installed to a different folder to be importable in Python:

install(TARGETS python_module_library
ARCHIVE DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION}
)
2.安装python可执行脚本
对于python代码,不同于c++风格,在你的CMakeLists.txt中使用如下,即可:

catkin_install_python(PROGRAMS scripts/myscript
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
对于安装python脚本以及模块的详细细节,以及如果布局整个文件夹,可参考catkin manual.
如果只是安装python脚本,不需要提供任何modules,那么就不需要创建上面提到的setup.py文件,也不需要调用catkin_python_setup().
3.安装头文件
头文件也必须安装到include文件夹中,通常通过安装整个文件夹的文件来实现(可选择的通过文件名类型以及排除svn 子文件夹的方式来过滤).通过以下安装规则来实现:

install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} PATTERN ".svn" EXCLUDE )
或者如果在include下的子文件没有匹配package名字:

install(DIRECTORY include/ DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} PATTERN ".svn" EXCLUDE )
4.安装launch文件以及其他的资源
其他的资源像launch文件可以被安装到${CATKIN_PACKAGE_SHARE_DESTINATION}:
install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch PATTERN ".svn" EXCLUDE)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2016-08-21 Part8-不用内存怎么行_6410内存初始化lesson3