<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 2.1 Catkin編譯系統 對于源代碼包,我們只有編譯才能在系統上運行。而Linux下的編譯器有gcc、g++,隨著源文件的增加,直接用gcc/g++命令的方式顯得效率低下,人們開始用Makefile來進行編譯。然而隨著工程體量的增大,Makefile也不能滿足需求,于是便出現了Cmake工具。CMake是對make工具的生成器,是更高層的工具,它簡化了編譯構建過程,能夠管理大型項目,具有良好的擴展性。對于ROS這樣大體量的平臺來說,就采用的是CMake,并且ROS對CMake進行了擴展,于是便有了Catkin編譯系統。 ![](https://img.kancloud.cn/5d/f5/5df533f2ad5e1a4e4581fdebe9f704dc_950x618.jpg) 早期的ROS編譯系統是rosbuild,但隨著ROS的不斷發展,rosbuild逐漸暴露出許多缺點,不能很好滿足系統需要。在Groovy版本面世后,Catkin作為rosbuild的替代品被正式投入使用。Catkin操作更加簡化且工作效率更高,可移植性更好,而且支持交叉編譯和更加合理的功能包分配。目前的ROS同時支持著rosbuild和Catkin兩種編譯系統,但ROS的核心軟件包也已經全部轉換為Catkin。rosbuild已經被逐步淘汰,所以建議初學者直接上手Catkin。 本節我們主要來介紹catkin的編譯系統。 ## 2.1.1 Catkin特點 Catkin是基于CMake的編譯構建系統,具有以下特點: * Catkin沿用了包管理的傳統像 `find_package()`基礎結構,`pkg-config` * 擴展了CMake,例如 * 軟件包編譯后無需安裝就可使用 * 自動生成`find_package()`代碼,`pkg-config`文件 * 解決了多個軟件包構建順序問題 一個Catkin的軟件包(package)必須要包括兩個文件: * package.xml: 包括了package的描述信息 * name, description, version, maintainer(s), license * opt. authors, url's, dependencies, plugins, etc... * CMakeLists.txt: 構建package所需的CMake文件 * 調用Catkin的函數/宏 * 解析`package.xml` * 找到其他依賴的catkin軟件包 * 將本軟件包添加到環境變量 ## 2.1.2 Catkin工作原理 catkin編譯的工作流程如下: 1. 首先在工作空間`catkin_ws/src/`下遞歸的查找其中每一個ROS的package。 2. package中會有`package.xml`和`CMakeLists.txt`文件,Catkin(CMake)編譯系統依據`CMakeLists.txt`文件,從而生成`makefiles`(放在`catkin_ws/build/`)。 3. 然后`make`剛剛生成的`makefiles`等文件,編譯鏈接生成可執行文件(放在`catkin_ws/devel`)。 也就是說,Catkin就是將`cmake`與`make`指令做了一個封裝從而完成整個編譯過程的工具。catkin有比較突出的優點,主要是: * 操作更加簡單 * 一次配置,多次使用 * 跨依賴項目編譯 ## 2.1.3 使用`catkin_make`進行編譯 要用catkin編譯一個工程或軟件包,只需要用`catkin_make`指令。一般當我們寫完代碼,執行一次`catkin_make`進行編譯,調用系統自動完成編譯和鏈接過程,構建生成目標文件。編譯的一般性流程如下,在1.5節我們編譯ROS-Academy-for-Beginners教學包就是這樣的流程。 ```bash $ cd ~/catkin_ws #回到工作空間,catkin_make必須在工作空間下執行 $ catkin_make #開始編譯 $ source ~/catkin_ws/devel/setup.bash #刷新壞境 ``` **注意:** catkin編譯之前需要回到工作空間目錄,`catkin_make`在其他路徑下編譯不會成功。編譯完成后,如果有新的目標文件產生(原來沒有),那么一般緊跟著要source刷新環境,使得系統能夠找到剛才編譯生成的ROS可執行文件。這個細節比較容易遺漏,致使后面出現可執行文件無法打開等錯誤。 `catkin_make`命令也有一些可選參數,例如: ``` catkin_make [args] -h, --help 幫助信息 -C DIRECTORY, --directory DIRECTORY 工作空間的路徑 (默認為 '.') --source SOURCE src的路徑 (默認為'workspace_base/src') --build BUILD build的路徑 (默認為'workspace_base/build') --use-ninja 用ninja取代make --use-nmake 用nmake取'make --force-cmake 強制cmake,即使已經cmake過 --no-color 禁止彩色輸出(只對catkin_make和CMake生效) --pkg PKG [PKG ...] 只對某個PKG進行make --only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...] 將指定的package列入白名單CATKIN_WHITELIST_PACKAGES, 之編譯白名單里的package。該環境變量存在于CMakeCache.txt。 --cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]] 傳給CMake的參數 --make-args [MAKE_ARGS [MAKE_ARGS ...]] 傳給Make的參數 --override-build-tool-check 用來覆蓋由于不同編譯工具產生的錯誤 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看