<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 2.4 CMakeLists.txt ## 2.4.1 CMakeLists.txt作用 `CMakeLists.txt`原本是Cmake編譯系統的規則文件,而Catkin編譯系統基本沿用了CMake的編譯風格,只是針對ROS工程添加了一些宏定義。所以在寫法上,catkin的`CMakeLists.txt`與CMake的基本一致。 這個文件直接規定了這個package要依賴哪些package,要編譯生成哪些目標,如何編譯等等流程。所以`CMakeLists.txt`非常重要,它指定了由源碼到目標文件的規則,catkin編譯系統在工作時首先會找到每個package下的`CMakeLists.txt`,然后按照規則來編譯構建。 ## 2.4.1 CMakeLists.txt寫法 `CMakeLists.txt`的基本語法都還是按照CMake,而Catkin在其中加入了少量的宏,總體的結構如下: ```cmake cmake_minimum_required() #CMake的版本號 project() #項目名稱 find_package() #找到編譯需要的其他CMake/Catkin package catkin_python_setup() #catkin新加宏,打開catkin的Python Module的支持 add_message_files() #catkin新加宏,添加自定義Message/Service/Action文件 add_service_files() add_action_files() generate_message() #catkin新加宏,生成不同語言版本的msg/srv/action接口 catkin_package() #catkin新加宏,生成當前package的cmake配置,供依賴本包的其他軟件包調用 add_library() #生成庫 add_executable() #生成可執行二進制文件 add_dependencies() #定義目標文件依賴于其他目標文件,確保其他目標已被構建 target_link_libraries() #鏈接 catkin_add_gtest() #catkin新加宏,生成測試 install() #安裝至本機 ``` 如果你從未接觸過CMake的語法,請閱讀《CMake實踐》:[https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf](https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf) 。掌握CMake語法對于理解ROS工程很有幫助。 ## 2.4.2 CMakeLists例子 為了詳細的解釋`CMakeLists.txt`的寫法,我們以turtlesim小海龜這個pacakge為例,讀者可`roscd`到`tuetlesim`包下查看,在`turtlesim/CMakeLists.txt`的寫法如下,: ``` cmake_minimum_required(VERSION 2.8.3) #CMake至少為2.8.3版 project(turtlesim) #項目(package)名稱為turtlesim,在后續文件中可使用變量${PROJECT_NAME}來引用項目名稱turltesim find_package(catkin REQUIRED COMPONENTS geometry_msgs message_generation rosconsole roscpp roscpp_serialization roslib rostime std_msgs std_srvs) #cmake宏,指定依賴的其他pacakge,實際是生成了一些環境變量,如<NAME>_FOUND, <NAME>_INCLUDE_DIRS, <NAME>_LIBRARYIS #此處catkin是必備依賴 其余的geometry_msgs...為組件 find_package(Qt5Widgets REQUIRED) find_package(Boost REQUIRED COMPONENTS thread) include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) #指定C++的頭文件路徑 link_directories(${catkin_LIBRARY_DIRS}) #指定鏈接庫的路徑 add_message_files(DIRECTORY msg FILES Color.msg Pose.msg) #自定義msg文件 add_service_files(DIRECTORY srv FILES Kill.srv SetPen.srv Spawn.srv TeleportAbsolute.srv TeleportRelative.srv) #自定義srv文件 generate_messages(DEPENDENCIES geometry_msgs std_msgs std_srvs) #在add_message_files、add_service_files宏之后必須加上這句話,用于生成srv msg頭文件/module,生成的文件位于devel/include中 catkin_package(CATKIN_DEPENDS geometry_msgs message_runtime std_msgs std_srvs) # catkin宏命令,用于配置ROS的package配置文件和CMake文件 # 這個命令必須在add_library()或者add_executable()之前調用,該函數有5個可選參數: # (1) INCLUDE_DIRS - 導出包的include路徑 # (2) LIBRARIES - 導出項目中的庫 # (3) CATKIN_DEPENDS - 該項目依賴的其他catkin項目 # (4) DEPENDS - 該項目所依賴的非catkin CMake項目。 # (5) CFG_EXTRAS - 其他配置選項 set(turtlesim_node_SRCS src/turtlesim.cpp src/turtle.cpp src/turtle_frame.cpp ) set(turtlesim_node_HDRS include/turtlesim/turtle_frame.h ) #指定turtlesim_node_SRCS、turtlesim_node_HDRS變量 qt5_wrap_cpp(turtlesim_node_MOCS ${turtlesim_node_HDRS}) add_executable(turtlesim_node ${turtlesim_node_SRCS} ${turtlesim_node_MOCS}) # 指定可執行文件目標turtlesim_node target_link_libraries(turtlesim_node Qt5::Widgets ${catkin_LIBRARIES} ${Boost_LIBRARIES}) # 指定鏈接可執行文件 add_dependencies(turtlesim_node turtlesim_gencpp) add_executable(turtle_teleop_key tutorials/teleop_turtle_key.cpp) target_link_libraries(turtle_teleop_key ${catkin_LIBRARIES}) add_dependencies(turtle_teleop_key turtlesim_gencpp) add_executable(draw_square tutorials/draw_square.cpp) target_link_libraries(draw_square ${catkin_LIBRARIES} ${Boost_LIBRARIES}) add_dependencies(draw_square turtlesim_gencpp) add_executable(mimic tutorials/mimic.cpp) target_link_libraries(mimic ${catkin_LIBRARIES}) add_dependencies(mimic turtlesim_gencpp) # 同樣指定可執行目標、鏈接、依賴 install(TARGETS turtlesim_node turtle_teleop_key draw_square mimic RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) # 安裝目標文件到本地系統 install(DIRECTORY images DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} FILES_MATCHING PATTERN "*.png" PATTERN "*.svg") ```
                  <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>

                              哎呀哎呀视频在线观看