ROS中的頭文件與源文件


3.2 ROS中的頭文件與源文件

此節的目的是為創建大型工程做准備

這里分別介紹兩種使用頭文件與源文件的代碼封裝方式:

  1. 設置頭文件,可執行文件作為源文件;
  2. 分別設置頭文件,源文件與可執行文件。

下面分別使用兩個例子來演示:

3.2.1 設置頭文件,可執行文件作為源文件

這部分內容總共分3步:

  1. 編寫頭文件;
  2. 編寫可執行文件(同時也是源文件);
  3. 編輯配置文件並執行。

需要學習者提前掌握相關C++知識。

如果缺乏C++相關的知識可以查閱我的C++學習日志專欄:
博客園
知乎
Github

  1. 編寫頭文件:
    在功能包下的 include/功能包名 目錄下新建頭文件: hello.h,示例內容如下:

然后開始編寫頭文件:

#ifndef _HELLO_H
#define _HELLO_H

namespace hello_ns{

class HelloPub {

public:
    void run();
};

}

#endif

如何配置c_cpp_properties.json文件中的includepath屬性,將剛才頭文件的路徑復制進去,防止后面再包含的時候編譯器拋出異常。

  1. 編寫可執行文件(同時也是源文件);

src目錄下新建hello.cpp文件:

#include "ros/ros.h"
#include "test_head/hello.h"

namespace hello_ns {

void HelloPub::run(){
    ROS_INFO("自定義頭文件的使用....");
}

}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"test_head_node");
    hello_ns::HelloPub helloPub;
    helloPub.run();
    return 0;
}
  1. 編輯配置文件並執行。

與之前CMakeLists.txt的配置不同的是,本次的配置添加頭文件相關的配置:

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

可執行配置文件配置方式與之前一致:

add_executable(hello src/hello.cpp)

add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(hello
  ${catkin_LIBRARIES}
)

最后編譯執行:

輸出:

[ INFO] [1629340364.149575292]: 自定義頭文件的使用....

3.2.2 分別設置頭文件,源文件與可執行文件

這個方法相對於上一個方法,在CMakeList.txt內的配置較為復雜。

這部分內容總共分4步:

  1. 編寫頭文件;

  2. 編寫源文件;

  3. 編寫可執行文件;

  4. 編輯配置文件並執行。

  5. 編寫頭文件(與上一個方法的內容相同)

#ifndef _HAHA_H
#define _HAHA_H

namespace hello_ns {

class My {

public:
    void run();

};

}

#endif
  1. 編寫源文件(即方案 1 中的函數,這里作為另外一個文件放在與主函數相同的目錄下)
    c_cpp_properties.json方面的配置與上面相同。

然后在src目錄下創建hello.cpp文件:

#include "test_head_src/haha.h"
#include "ros/ros.h"

namespace hello_ns{

void My::run(){
    ROS_INFO("hello,head and src ...");
}

}
  1. 編寫可執行文件(即主函數)
#include "ros/ros.h"
#include "test_head_src/haha.h"

int main(int argc, char *argv[])
{
    ros::init(argc,argv,"hahah");
    hello_ns::My my;
    my.run();
    return 0;
}
  1. 編輯配置文件並執行。

學過 C++ 的同學都知道, 對於多個文件,我們需要為文件創建鏈接。下面對於 CMakeList.txt 的配置主要目的也是為編譯器添加多個文件的鏈接。

頭文件與源文件相關的配置內容如下:

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

## 聲明C++庫
add_library(head
  include/test_head_src/haha.h
  src/haha.cpp
)

add_dependencies(head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(head
  ${catkin_LIBRARIES}
)

可執行文件配置基本上還是老三樣,唯一不同的地方是創建了鏈接庫,將源文件所在的庫與可執行文件創建了鏈接。

add_executable(use_head src/use_head.cpp)

add_dependencies(use_head ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

#此處需要添加之前設置的 head 庫
target_link_libraries(use_head
  head
  ${catkin_LIBRARIES}
)

弄完后,CMakeList.txt就是下面的樣子:

一點建議:英文好的同學有空可以多讀讀CMakeList文件的注釋,對於以后創建工程會很有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM