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換成當前的包名即可。
參考鏈接

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