鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    imu_utils编译到最后报连接器错误。这是我的报错和我的cmake文件,请鱼大佬帮我看一下

    已定时 已固定 已锁定 已移动 已解决
    ROS2机器人开发:从入门到实践
    ros2 rclcpp
    3
    13
    715
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Y
      yuan
      最后由 编辑

      e2403d6b-9c57-424e-bdae-84d603433545-image.png

      cmake_minimum_required(VERSION 2.8.3)
      project(imu_utils)
      if(POLICY CMP0057)
          cmake_policy(SET CMP0057 NEW)
      endif()
      ## Compile as C++11, supported in ROS Kinetic and newer
      set(CMAKE_BUILD_TYPE "Release")
      #set(CMAKE_CXX_FLAGS "-std=c++11")
      set(CMAKE_CXX_STANDARD 17)
      #-DEIGEN_USE_MKL_ALL")
      set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -fPIC")
      
      ## Find catkin macros and libraries
      ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
      ## is used, also find other catkin packages
      
      
      find_package(ament_cmake REQUIRED
          roscpp REQUIRED
          rclcpp REQUIRED
          std_msgs REQUIRED
          geometry_msgs REQUIRED
          nav_msgs REQUIRED
          code_utils REQUIRED
          )
      
      ## System dependencies are found with CMake's conventions
      # find_package(Boost REQUIRED COMPONENTS system)
      find_package(OpenCV REQUIRED)
      find_package(Ceres REQUIRED)
      find_package(Eigen3  REQUIRED)
      
      include_directories(
        ${ament_INCLUDE_DIRS}
        ${CERES_INCLUDE_DIRS}
        ${EIGEN3_INCLUDE_DIR}
        ${code_utils_INCLUDE_DIRS}
      )
      
      include_directories(/home/ysh/ros2_ws/install/code_utils/include)
      include_directories(/opt/ros/humble/include/cv_bridge)
      include_directories(/opt/ros/humble/include/sensor_msgs)
      include_directories(/opt/ros/humble/include/rosidl_runtime_cpp)
      include_directories(/opt/ros/humble/include/rosidl_runtime_c)
      include_directories(/opt/ros/humble/include/std_msgs)
      include_directories(/opt/ros/humble/include/rclcpp)
      include_directories(/opt/ros/humble/include/rcl)
      include_directories(/opt/ros/humble/include/message_filters)
      include_directories(/opt/ros/humble/include/builtin_interfaces)
      include_directories(/opt/ros/humble/include/rcutils)
      include_directories(/opt/ros/humble/include/rmw)
      include_directories(/opt/ros/humble/include/rcl_yaml_param_parser)
      include_directories(/opt/ros/humble/include/rosidl_typesupport_interface)
      include_directories(/opt/ros/humble/include/rcpputils)
      include_directories(/opt/ros/humble/include/tracetools)
      include_directories(/opt/ros/humble/include/rcl_interfaces)
      include_directories(/opt/ros/humble/include/libstatistics_collector)
      include_directories(/opt/ros/humble/include/statistics_msgs)
      include_directories(/opt/ros/humble/include/image_transport)
      include_directories(/opt/ros/humble/include/geometry_msgs)
      include_directories(/opt/ros/humble/include/rclcpp/rclcpp)
      set(ACC_LIB_SOURCE_FILES
          ${PROJECT_SOURCE_DIR}/src/acc_lib/allan_acc.cpp
          ${PROJECT_SOURCE_DIR}/src/acc_lib/fitallan_acc.cpp
          )
      set(GYR_LIB_SOURCE_FILES
          ${PROJECT_SOURCE_DIR}/src/gyr_lib/allan_gyr.cpp
          ${PROJECT_SOURCE_DIR}/src/gyr_lib/fitallan_gyr.cpp
          )
      
      add_executable(imu_an
          src/imu_an.cpp
          ${GYR_LIB_SOURCE_FILES}
          ${ACC_LIB_SOURCE_FILES}
          )
      
      target_link_libraries(imu_an ${ament_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES} )
      
      ament_package()
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • Y
        yuan @yuan
        最后由 编辑

        @yuan 少引入一个包嘿嘿,还有一个报错是看你之前的文件夹重复解决啦

        1 条回复 最后回复 回复 引用 0
        • 小伊小
          机器人小伊
          最后由 编辑

          从你提供的CMake文件和错误信息来看,主要的问题可能在于链接库的配置。首先,确保你的CMake文件正确找到了所有必要的库,并且这些库在链接时都被正确引用。以下是一些可能的问题和建议的修复方法:

          1. 确保ament_cmake和find_package的使用正确:

            • 你使用了ament_cmake,这是ROS 2中用于构建包的标准方式。但你的find_package调用似乎混合了ROS 1和ROS 2的风格。对于ROS 2,你应该使用find_package来查找ROS 2的组件,而不是直接指定roscpp、rclcpp等,因为ament_cmake会自动处理这些。
            find_package(ament_cmake REQUIRED
                COMPONENTS
                rclcpp
                std_msgs
                geometry_msgs
                nav_msgs
                # 注意:这里假设code_utils是一个ROS 2包,否则可能需要调整
                code_utils
            )
            
            • 确保code_utils是一个有效的ROS 2包,或者它是一个普通的C++库,并且已经通过find_package或其他方式被正确找到。
          2. 链接库:

            • 你需要确保所有使用的库都被添加到target_link_libraries中。对于ROS 2的包,通常不需要显式添加它们的库,因为ament_target_dependencies会处理这些依赖。但是,对于非ROS 2的库(如OpenCV、Ceres、Eigen3),你需要确保它们被正确链接。
            target_link_libraries(imu_an
                ${ament_target_dependencies(imu_an)}
                ${OpenCV_LIBS}
                ${CERES_LIBRARIES}
            )
            
            • 注意使用ament_target_dependencies来自动处理ROS 2包的依赖。
          3. 包含目录:

            • 你已经包含了很多ROS的目录,但通常这些目录应该由find_package或ament_cmake自动处理。你可以减少手动添加的路径数量,仅当find_package或ament_cmake无法自动处理时才手动添加。
          4. 编译选项:

            • 确保编译选项适合你的项目需求。你已经设置了C++17标准,这是很好的。但是,-g通常用于调试构建,如果你正在构建发布版本,可能不需要它。
          5. 检查CMake输出:

            • 在运行CMake时,仔细查看输出信息,特别是关于find_package的结果。确保所有必要的包都被正确找到。
          6. 环境配置:

            • 确保你的ROS 2环境已正确设置,包括工作空间、安装目录等。
          7. 错误消息:

            • 如果可能,请提供具体的连接器错误消息,这将有助于更精确地诊断问题。

          按照这些步骤检查和修改你的CMake文件,应该可以解决你遇到的问题。如果问题仍然存在,请提供更多的错误详情,以便进一步分析。


          以上为生成回答,仅供参考~

          我是小伊,已接入ChatGpt,所有回复,仅供参考~

          Y 1 条回复 最后回复 回复 引用 0
          • Y
            yuan @小伊
            最后由 编辑

            @小伊 这个已解决,但是我colcon build的时候把build,install,log都删除之后再colcon build的时候就报如下错误

            ysh@ysh:~/ros2_ws$ colcon build 
            Starting >>> code_utils
            Finished <<< code_utils [0.44s]                     
            Starting >>> imu_utils
            [1.015s] WARNING:colcon.colcon_cmake.task.cmake.build:Could not build CMake package 'imu_utils' because the CMake cache has no 'CMAKE_PROJECT_NAME' variable
            --- stderr: imu_utils
            Traceback (most recent call last):
              File "/home/ysh/.local/lib/python3.10/site-packages/colcon_core/executor/__init__.py", line 91, in __call__
                rc = await self.task(*args, **kwargs)
              File "/home/ysh/.local/lib/python3.10/site-packages/colcon_core/task/__init__.py", line 93, in __call__
                return await task_method(*args, **kwargs)
              File "/usr/lib/python3/dist-packages/colcon_ros/task/catkin/build.py", line 79, in build
                has_install_target = await has_target(args.build_base, 'install')
              File "/usr/lib/python3/dist-packages/colcon_cmake/task/cmake/__init__.py", line 56, in has_target
                if 'Unix Makefiles' in generator:
            TypeError: argument of type 'NoneType' is not iterable
            ---
            Failed   <<< imu_utils [0.30s, exited with code 1]
            
            Summary: 1 package finished [0.92s]
              1 package failed: imu_utils
              1 package had stderr output: imu_utils
            argument of type 'NoneType' is not iterable
            
            1 条回复 最后回复 回复 引用 0
            • 小伊小
              机器人小伊
              最后由 编辑

              从您提供的错误信息来看,imu_utils 这个包在构建时遇到了问题,主要是因为 CMake 缓存中没有找到 CMAKE_PROJECT_NAME 变量,这通常意味着 CMake 没有正确配置或者 CMake 缓存文件(如 CMakeCache.txt)可能已损坏或不存在。此外,还出现了一个类型错误,表明在尝试迭代一个 NoneType 类型的对象,这通常发生在尝试访问或操作未正确初始化的变量时。

              这里有几个步骤可以帮助您解决这个问题:

              1. 清理 CMake 缓存:
                由于您已经删除了 build、install 和 log 目录,您应该确保 CMake 的缓存也被清除。在您的包目录(imu_utils)中,查找并删除任何 CMakeCache.txt 文件。

              2. 重新配置 CMake:
                当您运行 colcon build 时,它应该会自动重新配置 CMake。但是,如果自动配置失败,您可以尝试手动运行 CMake 配置步骤。在您的包目录下(假设是 imu_utils),运行:

                mkdir -p build
                cd build
                cmake ..
                

                注意,这可能需要您先安装 CMake(如果尚未安装),并确保 CMake 的版本与您的 ROS 2 环境兼容。

              3. 检查 CMakeLists.txt:
                打开 imu_utils 的 CMakeLists.txt 文件,确保它包含正确设置 project() 命令的行,这通常位于文件的顶部。例如:

                cmake_minimum_required(VERSION 3.0.2)
                project(imu_utils)
                
              4. 运行 colcon build:
                在您的 ROS 2 工作空间根目录下,再次运行 colcon build。

              5. 检查 ROS 2 和 colcon 的版本:
                确保您安装的 ROS 2 和 colcon 的版本兼容。有时候,软件包的更新可能会破坏现有的构建配置。

              6. 查看更详细的日志:
                如果问题仍然存在,您可以尝试在 colcon build 命令中添加 --packages-select imu_utils --event-handlers console_direct+ 来获取更详细的构建日志,这有助于诊断问题。

              7. 搜索类似的错误:
                在 ROS 2 社区、Stack Overflow 或其他论坛中搜索类似的错误和解决方案。

              如果以上步骤都不能解决问题,您可能需要更详细地检查 imu_utils 包的源代码或寻求来自该包维护者或 ROS 2 社区的帮助。


              以上为生成回答,仅供参考~

              我是小伊,已接入ChatGpt,所有回复,仅供参考~

              Y 1 条回复 最后回复 回复 引用 0
              • Y
                yuan @小伊
                最后由 编辑

                @小伊 我的imu_utils在src目录下,imu_utils里面也没有build文件夹

                1 条回复 最后回复 回复 引用 0
                • 小伊小
                  机器人小伊
                  最后由 编辑

                  如果你在使用 imu_utils 这个库,并且它位于你的项目的 src 目录下,同时该目录下没有 build 文件夹,这意呀着你可能还没有进行过编译构建的过程。imu_utils 是一个通常用于处理IMU(惯性测量单元)数据的工具集,它可能包含了一些C++代码,这些代码需要被编译成可执行文件或库文件才能在你的项目中使用。

                  以下是一些步骤,你可以按照这些步骤来编译 imu_utils 并确保它能够在你的项目中正确运行:

                  1. 创建构建目录

                  首先,在你的 imu_utils 目录(或者它的父目录,这取决于你的偏好)中创建一个名为 build 的新目录。这个目录将用于存放编译过程中生成的所有文件,以避免污染源代码目录。

                  mkdir build
                  cd build
                  

                  2. 配置CMake(如果适用)

                  如果 imu_utils 是使用 CMake 作为构建系统的,你需要在 build 目录中运行 CMake 来配置项目。确保你的系统上已经安装了 CMake。

                  cmake ../path/to/imu_utils
                  

                  注意:将 ../path/to/imu_utils 替换为你的 imu_utils 目录的实际路径。如果你的 imu_utils 目录就在当前目录下,那么可以使用 ../。

                  3. 编译

                  配置完 CMake 后,你可以使用 make 命令(在 Linux 或 macOS 上)或相应的命令(如 Windows 上的 Visual Studio 构建系统)来编译项目。

                  make
                  

                  这个命令会根据 CMake 生成的构建文件来编译项目。

                  4. 使用编译后的文件

                  编译完成后,你的可执行文件或库文件将位于 build 目录的相应子目录中(通常是 bin 或 lib 目录,但这取决于 CMakeLists.txt 的配置)。你可以将这些文件添加到你的项目中,或者直接在命令行中运行可执行文件。

                  5. 注意事项

                  • 确保你的开发环境(如编译器、CMake等)已经正确安装并配置。
                  • 如果你在编译过程中遇到错误,检查 CMakeLists.txt 文件以确保所有依赖都已正确指定,并且你的系统满足所有依赖要求。
                  • 如果 imu_utils 是从网上下载的,确保你下载的是正确的版本,并且没有遗漏任何文件。

                  如果你不熟悉 CMake 或编译过程,可能需要花一些时间来学习这些工具的基础知识。不过,一旦你掌握了它们,你就可以轻松地构建和使用各种开源库和工具了。


                  以上为生成回答,仅供参考~

                  我是小伊,已接入ChatGpt,所有回复,仅供参考~

                  Y 1 条回复 最后回复 回复 引用 0
                  • Y
                    yuan @小伊
                    最后由 编辑

                    @小伊 按照你说的做,他现在是这样的

                    ysh@ysh:~/ros2_ws/src/imu_utils$ mkdir build
                    cd build
                    ysh@ysh:~/ros2_ws/src/imu_utils/build$ make
                    make: *** 没有指明目标并且找不到 makefile。 停止。
                    ysh@ysh:~/ros2_ws/src/imu_utils/build$ cmake ..
                    -- Found ament_cmake: 1.3.9 (/opt/ros/humble/share/ament_cmake/cmake)
                    -- Found required Ceres dependency: Eigen version 3.4.0 in /usr/include/eigen3
                    -- Found required Ceres dependency: glog
                    -- Found required Ceres dependency: gflags
                    -- Found Ceres version: 2.0.0 installed in: /usr with components: [EigenSparse, SparseLinearAlgebraLibrary, LAPACK, SuiteSparse, CXSparse, SchurSpecializations, Multithreading]
                    -- Configuring done
                    -- Generating done
                    -- Build files have been written to: /home/ysh/ros2_ws/src/imu_utils
                    ysh@ysh:~/ros2_ws/src/imu_utils/build$ make
                    make: *** 没有指明目标并且找不到 makefile。 停止。
                    ysh@ysh:~/ros2_ws/src/imu_utils/build$ make
                    make: *** 没有指明目标并且找不到 makefile。 停止。
                    
                    
                    1 条回复 最后回复 回复 引用 0
                    • 小伊小
                      机器人小伊
                      最后由 编辑

                      从你提供的输出来看,问题出在make命令上,它提示“没有指明目标并且找不到makefile”。这通常意味着在build目录下没有生成Makefile文件,或者Makefile文件的路径不正确。但是,从cmake ..的输出来看,CMake 似乎已经成功运行,并且声称已经将构建文件写入到了/home/ysh/ros2_ws/src/imu_utils,这看起来是一个错误,因为通常CMake会在build目录下生成Makefile。

                      这里有几个步骤可以帮助你解决这个问题:

                      1. 确认CMake的输出目录:
                        确保CMake的输出目录确实是build目录。从输出看,它可能错误地指向了/home/ysh/ros2_ws/src/imu_utils。但通常情况下,你应该在build目录下运行CMake。如果CMake配置有误,可能需要检查CMakeLists.txt文件,看看是否有设置输出目录的指令(如set(CMAKE_BINARY_DIR ...)),但这在标准的ROS 2包中是不常见的。

                      2. 重新在build目录下运行CMake:
                        你已经在build目录下运行了CMake,但让我们再次确认。首先,确保你在build目录下,然后运行:

                        cd ~/ros2_ws/src/imu_utils/build
                        cmake ..
                        

                        注意,cmake ..命令中的..表示CMake应该查看当前目录的上一级目录(即imu_utils目录)来查找CMakeLists.txt文件。

                      3. 检查build目录下的文件:
                        运行CMake后,检查build目录下是否生成了Makefile和其他CMake生成的文件(如CMakeCache.txt、cmake_install.cmake等)。

                      4. 运行make:
                        如果Makefile和其他文件都正确生成在build目录下,你现在应该能够运行make来编译你的项目:

                        make
                        
                      5. 检查CMakeLists.txt:
                        如果以上步骤仍然无法解决问题,请检查imu_utils目录下的CMakeLists.txt文件,确保它正确无误地配置了项目,并且没有指向错误的目录或文件。

                      6. 清理和重建:
                        如果可能,你可以尝试删除build目录并重新创建它,然后再次运行CMake和make:

                        rm -rf ~/ros2_ws/src/imu_utils/build
                        mkdir -p ~/ros2_ws/src/imu_utils/build
                        cd ~/ros2_ws/src/imu_utils/build
                        cmake ..
                        make
                        

                      如果上述步骤仍然无法解决问题,可能需要更详细地查看CMakeLists.txt文件,或者检查是否有其他配置或环境问题影响CMake和make的执行。


                      以上为生成回答,仅供参考~

                      我是小伊,已接入ChatGpt,所有回复,仅供参考~

                      Y 1 条回复 最后回复 回复 引用 0
                      • Y
                        yuan @小伊
                        最后由 编辑

                        @小伊
                        这个是cmake文件

                        cmake_minimum_required(VERSION 3.10)
                        project(imu_utils)
                        if(POLICY CMP0057)
                            cmake_policy(SET CMP0057 NEW)
                        endif()
                        ## Compile as C++11, supported in ROS Kinetic and newer
                        set(CMAKE_BUILD_TYPE "Release")
                        #set(CMAKE_CXX_FLAGS "-std=c++11")
                        set(CMAKE_CXX_STANDARD 17)
                        #-DEIGEN_USE_MKL_ALL")
                        set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -fPIC")
                        
                        ## Find catkin macros and libraries
                        ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
                        ## is used, also find other catkin packages
                        
                        #link_directories(/opt/ros/humble/lib)
                        find_package(ament_cmake REQUIRED
                            roscpp REQUIRED
                            rclcpp REQUIRED
                            std_msgs REQUIRED
                            geometry_msgs REQUIRED
                            nav_msgs REQUIRED
                        
                            )
                        
                        ## System dependencies are found with CMake's conventions
                        # find_package(Boost REQUIRED COMPONENTS system)
                        find_package(OpenCV REQUIRED)
                        find_package(Ceres REQUIRED)
                        find_package(Eigen3  REQUIRED)
                        
                        include_directories(
                          ${ament_INCLUDE_DIRS}
                          ${CERES_INCLUDE_DIRS}
                          ${EIGEN3_INCLUDE_DIR}
                          ${code_utils_INCLUDE_DIRS}
                        )
                        
                        include_directories(/home/ysh/ros2_ws/install/code_utils/include)
                        include_directories(/opt/ros/humble/include/cv_bridge)
                        include_directories(/opt/ros/humble/include/sensor_msgs)
                        include_directories(/opt/ros/humble/include/rosidl_runtime_cpp)
                        include_directories(/opt/ros/humble/include/rosidl_runtime_c)
                        include_directories(/opt/ros/humble/include/std_msgs)
                        include_directories(/opt/ros/humble/include/rclcpp)
                        include_directories(/opt/ros/humble/include/rcl)
                        include_directories(/opt/ros/humble/include/message_filters)
                        include_directories(/opt/ros/humble/include/builtin_interfaces)
                        include_directories(/opt/ros/humble/include/rcutils)
                        include_directories(/opt/ros/humble/include/rmw)
                        include_directories(/opt/ros/humble/include/rcl_yaml_param_parser)
                        include_directories(/opt/ros/humble/include/rosidl_typesupport_interface)
                        include_directories(/opt/ros/humble/include/rcpputils)
                        include_directories(/opt/ros/humble/include/tracetools)
                        include_directories(/opt/ros/humble/include/rcl_interfaces)
                        include_directories(/opt/ros/humble/include/libstatistics_collector)
                        include_directories(/opt/ros/humble/include/statistics_msgs)
                        include_directories(/opt/ros/humble/include/image_transport)
                        include_directories(/opt/ros/humble/include/geometry_msgs)
                        #include_directories(/opt/ros/humble/include/rclcpp/rclcpp)
                        set(ACC_LIB_SOURCE_FILES
                            ${PROJECT_SOURCE_DIR}/src/acc_lib/allan_acc.cpp
                            ${PROJECT_SOURCE_DIR}/src/acc_lib/fitallan_acc.cpp
                            )
                        set(GYR_LIB_SOURCE_FILES
                            ${PROJECT_SOURCE_DIR}/src/gyr_lib/allan_gyr.cpp
                            ${PROJECT_SOURCE_DIR}/src/gyr_lib/fitallan_gyr.cpp
                            )
                        
                        add_executable(imu_an
                            src/imu_an.cpp
                            ${GYR_LIB_SOURCE_FILES}
                            ${ACC_LIB_SOURCE_FILES}
                            )
                        
                        target_link_libraries(imu_an ${ament_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES}  )
                        
                        ament_package()
                        
                        1 条回复 最后回复 回复 引用 0
                        • 小伊小
                          机器人小伊
                          最后由 编辑

                          这个CMake文件是为ROS 2(或类似ROS 2环境的ament构建系统)的imu_utils项目配置的。它主要做了以下几件事情:

                          1. 设置CMake版本和项目信息:

                            • 指定CMake的最低版本为3.10。
                            • 定义项目名为imu_utils。
                            • 设置C++标准为C++17,并设置了Release模式下的编译标志。
                          2. 依赖查找:

                            • 使用find_package查找ament_cmake、ROS 2相关的包(如roscpp, rclcpp等)、OpenCV、Ceres Solver和Eigen3等依赖。
                            • 需要注意的是,虽然ament_cmake的find_package语法支持链式查找依赖,但这里的示例可能略显混乱,因为ament_cmake通常用于ROS 2,而find_package(roscpp REQUIRED)等看起来更像ROS 1的语法。在ROS 2中,通常不需要单独查找roscpp等,因为它们作为ROS 2的一部分被自动处理。
                          3. 包含目录:

                            • 通过include_directories指令添加了许多头文件的搜索路径,包括ament、Ceres、Eigen3等依赖,以及ROS 2的一些内部库和消息类型。这里有一些路径可能是不必要的,特别是如果它们已经被find_package调用隐式包含的话。
                          4. 源文件设置:

                            • 定义了加速度计(ACC_LIB_SOURCE_FILES)和陀螺仪(GYR_LIB_SOURCE_FILES)相关的源文件。
                            • 将这些源文件与主程序imu_an.cpp一起添加到可执行文件imu_an中。
                          5. 链接库:

                            • 使用target_link_libraries将imu_an目标链接到所需的库,包括通过ament_LIBRARIES(这里可能不是ROS 2的标准用法,ROS 2通常不需要这样做)、OpenCV和Ceres Solver库。
                          6. ament包配置:

                            • 调用ament_package()来配置ament包。这是ROS 2特有的,用于创建ament兼容的包。

                          改进建议:

                          • 依赖查找:如果这是ROS 2项目,请确保使用正确的find_package语法来查找ROS 2相关的包。例如,find_package(rclcpp REQUIRED)是适当的,但find_package(roscpp REQUIRED)可能不是(除非你有特定的理由需要这样做,但通常不需要)。
                          • 包含目录:检查哪些目录是必需的,并去除不必要的include_directories调用。通常,find_package调用会自动设置正确的包含目录。
                          • CMake策略:虽然你设置了CMP0057策略,但最好检查并应用所有相关的CMake策略,以确保跨不同CMake版本的兼容性。
                          • 代码组织:考虑将源文件按逻辑分组到不同的目录中,并在CMakeLists.txt中相应地调整路径。
                          • CMake变量:使用CMake变量(如${PROJECT_SOURCE_DIR})来引用项目目录是一个好习惯,这有助于保持CMakeLists.txt的可移植性和可维护性。

                          以上为生成回答,仅供参考~

                          我是小伊,已接入ChatGpt,所有回复,仅供参考~

                          1 条回复 最后回复 回复 引用 0
                          • 小鱼小
                            小鱼 技术大佬 @yuan
                            最后由 编辑

                            @yuan 你这个错误可以复制粘贴不:https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答

                            另外工程结构展示下呗

                            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                            Y 1 条回复 最后回复 回复 引用 0
                            • Y
                              yuan @小鱼
                              最后由 编辑

                              @小鱼 谢谢你哦,我已经解决啦

                              Y 1 条回复 最后回复 回复 引用 0
                              • Y
                                yuan @yuan
                                最后由 编辑

                                @yuan 少引入一个包嘿嘿,还有一个报错是看你之前的文件夹重复解决啦

                                1 条回复 最后回复 回复 引用 0
                                • 小鱼小 小鱼 将这个主题标记为已解决,在
                                • 小伊小 小伊 从 中的 社区运营 移动了该主题
                                • 第一个帖子
                                  最后一个帖子
                                皖ICP备16016415号-7
                                Powered by NodeBB | 鱼香ROS