cmake 和cmakeList.txt, catkin_make ,catkin_make_isolated总结

cmake 和cmakeList.txt 总结
参考网址:https://www.cnblogs.com/lsgxeva/p/9454443.html
cmake 官网参考程序
https://cmake.org/cmake/help/v3.16/

add_dependencies

为顶层目标引入一个依赖关系。

  add_dependencies(target-name depend-target1
                   depend-target2 ...)

 让一个顶层目标依赖于其他的顶层目标。一个顶层目标是由命令ADD_EXECUTABLE,ADD_LIBRARY,或者ADD_CUSTOM_TARGET产生的目标。为这些命令的输出引入依赖性可以保证某个目标在其他的目标之前被构建。查看ADD_CUSTOM_TARGET和ADD_CUSTOM_COMMAND命令的DEPENDS选项,可以了解如何根据自定义规则引入文件级的依赖性。查看SET_SOURCE_FILES_PROPERTIES命令的OBJECT_DEPENDS选项,可以了解如何为目标文件引入文件级的依赖性。

add_executable

使用给定的源文件,为工程引入一个可执行文件。

 add_executable(<name> [WIN32] [MACOSX_BUNDLE]
                 [EXCLUDE_FROM_ALL]
                 source1 source2 ... sourceN)


引入一个名为<name>的可执行目标,该目标会由调用该命令时在源文件列表中指定的源文件来构建。<name>对应于逻辑目标名字,并且在工程范围内必须是全局唯一的。被构建的可执行目标的实际文件名将根据具体的本地平台创建出来(比如<name>.exe或者仅仅是<name>)

add_library

使用指定的源文件向工程中添加一个库。

add_library(<name> [STATIC | SHARED | MODULE]
              [EXCLUDE_FROM_ALL]
              source1 source2 ... sourceN)


添加一个名为<name>的库文件,该库文件将会根据调用的命令里列出的源文件来创建。<name>对应于逻辑目标名称,而且在一个工程的全局域内必须是唯一的。待构建的库文件的实际文件名根据对应平台的命名约定来构造(比如lib<name>.a或者<name>.lib)。指定STATIC,SHARED,或者MODULE参数用来指定要创建的库的类型。STATIC库是目标文件的归档文件,在链接其它目标的时候使用。SHARED库会被动态链接,在运行时被加载。MODULE库是不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数动态链接。如果没有类型被显式指定,这个选项将会根据变量BUILD_SHARED_LIBS的当前值是否为真决定是STATIC还是SHARED。

add_subdirectory

为构建添加一个子路径。

add_subdirectory(source_dir [binary_dir]
                   [EXCLUDE_FROM_ALL])


这条命令的作用是为构建添加一个子路径。source_dir选项指定了CMakeLists.txt源文件和代码文件的位置。如果source_dir是一个相对路径,那么source_dir选项会被解释为相对于当前的目录,但是它也可以是一个绝对路径。binary_dir选项指定了输出文件的路径。如果binary_dir是相对路径,它将会被解释为相对于当前输出路径,但是它也可以是一个绝对路径。如果没有指定binary_dir,binary_dir的值将会是没有做任何相对路径展开的source_dir,这也是通常的用法。在source_dir指定路径下的CMakeLists.txt将会在当前输入文件的处理过程执行到该命令之前,立即被CMake处理。

aux_source_directory  查找在某个路径下的所有源文件。
  aux_source_directory(<dir> <variable>)
搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的<variable>变量中。该命令主要用在那些使用显式模板实例化的工程上。模板实例化文件可以存储在Templates子目录下,然后可以使用这条命令自动收集起来;这样可以避免手工罗列所有的实例。
使用该命令来避免为一个库或可执行目标写源文件的清单,是非常具有吸引力的

find_file 查找一个文件的完整路径。
   find_file(<VAR> name1 [path1 path2 ...])
这是该命令的精简格式,对于大多数场合它都足够了。它与命令find_file(<VAR> name1 [PATHS path1 path2

<think>好的,我现在需要解决用户遇到的CMake构建错误,具体是catkin_package的include目录不存在的问题,用户使用的是Melodic版本。首先,我得回忆一下ROS中catkin构建系统的基本知识。 根据用户提供的引用内容,特别是引用[3],其中提到在构建时如果存在不规范的包或者之前构建产生的隔离文件夹(比如build_isolated),可能会导致错误。这可能意味着需要清理旧的构建文件。所以,用户可能需要删除build、devel、install等目录,然后重新运行catkin_make。 另外,引用[2]提到了安装PCL的步骤,但用户的问题是关于include目录不存在,可能与依赖的安装或路径配置有关。需要确认是否所有依赖项都已正确安装,并且头文件路径正确包含在CMakeLists.txt中。 接下来,我需要检查用户的CMakeLists.txt文件是否正确配置了include目录。例如,使用include_directories()命令包含必要的头文件路径,尤其是catkin相关的路径。如果用户的项目依赖其他ROS包,需要确保这些包在find_package()中被正确调用,并且依赖项在package.xml中声明。 另外,catkin_package()命令的参数是否正确?例如,是否指定了正确的INCLUDE_DIRS或LIBRARIES。如果include目录的路径有误或不存在,就会导致这个错误。用户需要检查CATKIN_DEPENDSINCLUDE_DIRS中的路径是否存在,并确保这些路径在构建时已经生成。 还有,环境变量的问题也可能导致路径找不到。用户是否在正确的workspace环境下执行了source devel/setup.bash?如果没有,可能导致路径解析错误。 最后,根据用户提供的错误信息,可能需要检查具体的路径是否存在,例如/opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake是否存在,或者是否有权限问题。 总结可能的解决步骤:清理构建文件,检查依赖项,确保CMakeLists.txt正确配置include路径,验证catkin_package参数,检查环境变量路径权限。此外,参考已有的解决方案,如安装缺失的或处理隔离构建目录的问题。</think>### CMake catkin_package include目录不存在错误解决方案(Melodic版) 当出现`catkin_package include dir does not exist`错误时,通常与ROS工作空间的配置或CMakeLists.txt的编写有关。以下是分步解决方案: 1. **清理旧构建文件** ```bash cd ~/catkin_ws rm -rf build devel install # 删除所有构建产物 ``` 若存在`build_isolated`等隔离目录(常见于混合构建工具如`catkin_make_isolated`),需一并删除[^3]。 2. **检查CMakeLists.txt配置** - 确认`include_directories`包含`${catkin_INCLUDE_DIRS}`: ```cmake include_directories( include ${catkin_INCLUDE_DIRS} ) ``` - 检查`catkin_package`声明是否包含正确的头文件路径: ```cmake catkin_package( INCLUDE_DIRS include # 确保此路径存在且包含头文件 LIBRARIES your_library CATKIN_DEPENDS roscpp std_msgs ) ``` - 若项目无自定义头文件,可移除`INCLUDE_DIRS include`参数。 3. **验证头文件路径存在性** ```bash cd ~/catkin_ws/src/your_package ls include/ # 确认目录存在且包含.h/.hpp文件 ``` 若目录不存在,需创建并添加头文件,或删除CMakeLists.txt中对应的路径声明。 4. **安装缺失依赖** 若依赖其他ROS包(如PCL): ```bash sudo apt-get install ros-melodic-pcl-conversions # 以PCL为例[^2] ``` 并在`package.xml`中添加依赖声明: ```xml <depend>roscpp</depend> <depend>pcl_conversions</depend> ``` 5. **重新构建工作空间** ```bash cd ~/catkin_ws catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 # 指定Python版本(可选) source devel/setup.bash ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值