記錄兩個ROS工程編譯時候的問題

1.contains a package but "catkin_make" must be invoked in the root of workspace

contains a package but "catkin_make" must be invoked in the root of workspace錯誤提示的字面意思是當前包含了一個package,但是catking_make命令必須在工作空間的頂級目錄下執行。

先說下我是怎麼出現這個問題的吧。我在創建了一個catkin_ws目錄之後,在這個目錄裏邊直接使用命令catkin_create_pkg命令創建了個maker子目錄,然後進入marker裏邊添加了CMakeLists.txt並進行編輯,同時在marker下還創建了src子目錄,並在src下寫了test_marker.cpp文件。然後在marker這一級目錄下進行編譯的,編譯報了上面的錯誤。

當仔細看了日誌提醒後,我覺得我把workspace和package這兩個ROS當中很重要的概念混了。而且這裏日誌提醒必須在workspace的root下編譯,這樣catkin_make命令纔會有用。

一個workspace下面可以有多個package,但是workspace有自己組織package的方式。每一個package都是workspace當中的代碼包,應該存放在src下面。那麼,組織結構如下所示:

|---workspace
|   |---src
|      |---package_1
|         |---CMakeLists.txt
|         |---src 
|             |---xxx.cpp
       |---package_2
...
|
|      |---package_n

這樣組織工程後,在workspace下直接使用catkin_make命令編譯就ok了。

編譯完成後,會創建中間文件build和devel,生成的可執行文件就在devel下面。此時工程目錄大致如下:

|---workspace
|   |---build
|   |---devel
|   |---src
|      |---package_1
|         |---CMakeLists.txt
|         |---src 
|             |---xxx.cpp
       |---package_2
...
|
|      |---package_n

 

2.fatal error: ros/ros.h: No such file or directory

fatal error: ros/ros.h: No such file or directory錯誤提示我們沒有該文件或者目錄,那意思就是說我們沒有引用對應的文件或者目錄。

問題原因:在CMakeLists.txt當中沒有把下面這一項打開

include_directories(
 include
 ${catkin_INCLUDE_DIRS}
)

這裏的include_directories是可以指定包含目錄的選項。設定爲${catkin_INCLUDE_DIRS},這意味着將引用每個功能包中的include目錄中的頭文件。當用戶想指定一個額外的include目錄時,寫在${catkin_INCLUDE_DIRS}的下一行即可。

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