接触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_cpp
,current_package
换成当前的包名即可。
参考链接
ros项目第一次编译无法找到msg/srv文件产生的头文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.