ros项目第一次编译无法找到msg/srv文件产生的头文件

  接触ROS开发已经快2年了,虽然相对来说已经比较熟悉了,但仍然未达到精通的地步,还在学习中。近期在编译一个包,src源文件和msg/srv在同一个包里面,总是在第一次编译时出现无法找到xxxxx.h头文件,这个头文件是由msg/srv文件编译产生的,报错后如果去对应的文件夹下面去找是可以找到该头文件的,报错后再执行一次编译命令(不要删除刚刚的编译结果)就可以通过了,这个问题遇到的次数比较多了,从第一次到现在时间比较久了,之前遇到这样的问题就是多编译几次,没有想太多,直到这次遇到msg/srv文件和需要它编译产生的头文件的cpp文件在同一个包里时,仍然提示找不到xxxx.h头文件我就比较纳闷了,在一个包里面,先编译产生头文件,然后再使用,这怎么会找不到呢?这个问题促使我去发现这个问题的原因。
  一般情况下,如果你的msg/srv文件是一个单独的package的话(假设为A),在依赖A生成的头文件的packageB里面编译对应的cpp文件时,在add_dependencies的最后添加${catkin_EXPORTED_TARGETS}会包含所有在find_package里面列出的包的_generate_messages_cpp宏用来生成对应的头文件,这样编译应该是没有问题的。但是当msg/srv和需要其产生头文件的cpp文件在同一个包里面时,第一次编译会报找不到头文件的错,在${catkin_EXPORTED_TARGETS}这个宏之前再加一个current_package_generate_messages_cppcurrent_package换成当前的包名即可。
参考链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章