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

    ros2 foxy 自定义消息接口编译 “没有规则可制作目标”

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    ros2编译 ros2-foxy ros2话题
    2
    14
    1.2k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 8
      Egoist @87725837
      最后由 编辑

      @87725837
      补充一下我的CMakeLists.txt:

      cmake_minimum_required(VERSION 3.5)
      project(village_interfaces)

      if(NOT CMAKE_C_STANDARD)
      set(CMAKE_C_STANDARD 99)
      endif()

      if(NOT CMAKE_CXX_STANDARD)
      set(CMAKE_CXX_STANDARD 14)
      endif()

      if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic)
      endif()

      find_package(ament_cmake REQUIRED)

      find_package(sensor_msgs REQUIRED)
      find_package(rosidl_default_generators REQUIRED)

      rosidl_generate_interfaces(${PROJECT_NAME}
      "msg/Novel.msg"
      DEPENDENCIES sensor_msgs
      )

      if(BUILD_TESTING)
      find_package(ament_lint_auto REQUIRED)
      ament_lint_auto_find_test_dependencies()
      endif()

      ament_package()

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

        @87725837 请按照提问要求修改格式:https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答

        另外你需要提供文件结构,相关文件的内容,注意尽量不要截图。

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

        8 1 条回复 最后回复 回复 引用 0
        • 8
          Egoist @小鱼
          最后由 87725837 编辑

          @小鱼

          package.xml

          <?xml version="1.0"?>
          <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
          <package format="3">
            <name>village_interfaces</name>
            <version>0.0.0</version>
            <description>TODO: Package description</description>
            <maintainer email="">oem</maintainer>
            <license>TODO: License declaration</license>
          
            <buildtool_depend>ament_cmake</buildtool_depend>
          
            <test_depend>ament_lint_auto</test_depend>
            <test_depend>ament_lint_common</test_depend>
          
            <depend>sensor_msgs</depend>
            <build_depend>rosidl_default_generators</build_depend>
            <exec_depend>rosidl_default_runtime</exec_depend>
            <member_of_group>rosidl_interface_packages</member_of_group>
          
            <export>
              <build_type>ament_cmake</build_type>
            </export>
          </package>
          

          结构

          village_interfaces
          ├── CMakeLists.txt
          ├── include
          │   └── village_interfaces
          ├── msg
          │   └── Novel.msg
          ├── package.xml
          └── src
          

          Novel.msg

          string conten
          sensor_msgs/Image image
          
          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @87725837
            最后由 编辑

            @87725837 你的构建命令是在哪一个目录下运行的

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

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

              @小鱼 工作空间下运行的

              oem@oem-ThinkPad-X1-Yoga-3rd:~/town_ws$ colcon build --packages-select village_interfaces
              Starting >>> village_interfaces
              --- stderr: village_interfaces                             
              make[1]: *** 没有规则可制作目标“village_interfaces__py/CMakeFiles/village_interfaces__py.dir/all”,由“CMakeFiles/village_interfaces__python.dir/all” 需求。 停止。
              make[1]: *** 正在等待未完成的任务....
              make: *** [Makefile:146:all] 错误 2
              ---
              Failed   <<< village_interfaces [0.12s, exited with code 2]
              
              Summary: 0 packages finished [0.50s]
                1 package failed: village_interfaces
                1 package had stderr output: village_interfaces
              
              小鱼小 1 条回复 最后回复 回复 引用 0
              • 小鱼小
                小鱼 技术大佬 @87725837
                最后由 编辑

                @87725837 排除一些环境因素先,可以尝试在root下构建:

                在oem@oem-ThinkPad-X1-Yoga-3rd:~/town_ws$目录下执行如下命令:

                sudo su
                source /opt/ros/foxy/setup.bash
                rm -rf build install log
                colcon build

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

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

                  @小鱼
                  结果如下:

                  oem@oem-ThinkPad-X1-Yoga-3rd:~/town_ws$ sudo su 
                  [sudo] oem 的密码: 
                  root@oem-ThinkPad-X1-Yoga-3rd:/home/oem/town_ws# source /opt/ros/foxy/setup.bash 
                  root@oem-ThinkPad-X1-Yoga-3rd:/home/oem/town_ws# rm -rf build/ install/ log/
                  root@oem-ThinkPad-X1-Yoga-3rd:/home/oem/town_ws# colcon build
                  Starting >>> village_interfaces
                  Starting >>> village_li
                  Starting >>> village_wang
                  Finished <<< village_li [1.37s]                                        
                  --- stderr: village_interfaces                                             
                  make[1]: *** 没有规则可制作目标“village_interfaces__py/CMakeFiles/village_interfaces__py.dir/all”,由“CMakeFiles/village_interfaces__python.dir/all” 需求。 停止。
                  make[1]: *** 正在等待未完成的任务....
                  make: *** [Makefile:146:all] 错误 2
                  ---
                  Failed   <<< village_interfaces [2.91s, exited with code 2]
                  Aborted  <<< village_wang [8.64s]                                
                  
                  Summary: 1 package finished [9.06s]
                    1 package failed: village_interfaces
                    1 package aborted: village_wang
                    1 package had stderr output: village_interfaces
                  root@oem-ThinkPad-X1-Yoga-3rd:/home/oem/town_ws# 
                  

                  自定义消息的包还是一样的报错

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

                    @87725837 尝试开一个新的工作空间,下载我的代码,进行构建测试,再排除下代码问题,代码地址:https://github.com/fishros/ros2_town

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

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

                      @小鱼 结果如下:

                      oem@oem-ThinkPad-X1-Yoga-3rd:~$ git clone https://github.com/fishros/ros2_town
                      正克隆到 'ros2_town'...
                      remote: Enumerating objects: 1134, done.
                      remote: Counting objects: 100% (1134/1134), done.
                      remote: Compressing objects: 100% (510/510), done.
                      remote: Total 1134 (delta 556), reused 1053 (delta 477), pack-reused 0
                      接收对象中: 100% (1134/1134), 1.44 MiB | 701.00 KiB/s, 完成.
                      处理 delta 中: 100% (556/556), 完成.
                      oem@oem-ThinkPad-X1-Yoga-3rd:~$ cd ros2_town/
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ ls
                      README.md  src
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ cd src/
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town/src$ ls
                      village_interfaces  village_li  village_wang  village_zhang
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town/src$ cd ..
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ coclon build
                      coclon:未找到命令
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ colcon build
                      Starting >>> village_interfaces
                      --- stderr: village_interfaces                             
                      make[1]: *** 没有规则可制作目标“village_interfaces__py/CMakeFiles/village_interfaces__py.dir/all”,由“CMakeFiles/village_interfaces__python.dir/all” 需求。 停止。
                      make[1]: *** 正在等待未完成的任务....
                      make: *** [Makefile:146:all] 错误 2
                      ---
                      Failed   <<< village_interfaces [3.35s, exited with code 2]
                      
                      Summary: 0 packages finished [3.86s]
                        1 package failed: village_interfaces
                        1 package had stderr output: village_interfaces
                        3 packages not processed
                      oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ 
                      
                      小鱼小 1 条回复 最后回复 回复 引用 0
                      • 小鱼小
                        小鱼 技术大佬 @87725837
                        最后由 编辑

                        @87725837 在 ros2 foxy 自定义消息接口编译 “没有规则可制作目标” 中说:

                        coclon build
                        coclon:未找到命令
                        oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ colcon build

                        可以确定是环境问题了,应该和你混装ros和ros2造成的,请附上你的 ~/.bashrc 文件内容,进一步检查环境。

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

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

                          @小鱼

                          # ~/.bashrc: executed by bash(1) for non-login shells.
                          # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
                          # for examples
                          
                          # If not running interactively, don't do anything
                          case $- in
                              *i*) ;;
                                *) return;;
                          esac
                          
                          # don't put duplicate lines or lines starting with space in the history.
                          # See bash(1) for more options
                          HISTCONTROL=ignoreboth
                          
                          # append to the history file, don't overwrite it
                          shopt -s histappend
                          
                          # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
                          HISTSIZE=1000
                          HISTFILESIZE=2000
                          
                          # check the window size after each command and, if necessary,
                          # update the values of LINES and COLUMNS.
                          shopt -s checkwinsize
                          
                          # If set, the pattern "**" used in a pathname expansion context will
                          # match all files and zero or more directories and subdirectories.
                          #shopt -s globstar
                          
                          # make less more friendly for non-text input files, see lesspipe(1)
                          [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
                          
                          # set variable identifying the chroot you work in (used in the prompt below)
                          if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
                              debian_chroot=$(cat /etc/debian_chroot)
                          fi
                          
                          # set a fancy prompt (non-color, unless we know we "want" color)
                          case "$TERM" in
                              xterm-color|*-256color) color_prompt=yes;;
                          esac
                          
                          # uncomment for a colored prompt, if the terminal has the capability; turned
                          # off by default to not distract the user: the focus in a terminal window
                          # should be on the output of commands, not on the prompt
                          #force_color_prompt=yes
                          
                          if [ -n "$force_color_prompt" ]; then
                              if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
                          	# We have color support; assume it's compliant with Ecma-48
                          	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
                          	# a case would tend to support setf rather than setaf.)
                          	color_prompt=yes
                              else
                          	color_prompt=
                              fi
                          fi
                          
                          if [ "$color_prompt" = yes ]; then
                              PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
                          else
                              PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
                          fi
                          unset color_prompt force_color_prompt
                          
                          # If this is an xterm set the title to user@host:dir
                          case "$TERM" in
                          xterm*|rxvt*)
                              PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
                              ;;
                          *)
                              ;;
                          esac
                          
                          # enable color support of ls and also add handy aliases
                          if [ -x /usr/bin/dircolors ]; then
                              test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
                              alias ls='ls --color=auto'
                              #alias dir='dir --color=auto'
                              #alias vdir='vdir --color=auto'
                          
                              alias grep='grep --color=auto'
                              alias fgrep='fgrep --color=auto'
                              alias egrep='egrep --color=auto'
                          fi
                          
                          # colored GCC warnings and errors
                          #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
                          
                          # some more ls aliases
                          alias ll='ls -alF'
                          alias la='ls -A'
                          alias l='ls -CF'
                          
                          # Add an "alert" alias for long running commands.  Use like so:
                          #   sleep 10; alert
                          alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
                          
                          # Alias definitions.
                          # You may want to put all your additions into a separate file like
                          # ~/.bash_aliases, instead of adding them here directly.
                          # See /usr/share/doc/bash-doc/examples in the bash-doc package.
                          
                          if [ -f ~/.bash_aliases ]; then
                              . ~/.bash_aliases
                          fi
                          
                          # enable programmable completion features (you don't need to enable
                          # this, if it's already enabled in /etc/bash.bashrc and /etc/profile
                          # sources /etc/bash.bashrc).
                          if ! shopt -oq posix; then
                            if [ -f /usr/share/bash-completion/bash_completion ]; then
                              . /usr/share/bash-completion/bash_completion
                            elif [ -f /etc/bash_completion ]; then
                              . /etc/bash_completion
                            fi
                          fi
                          
                          
                          source ~/realsense_ws/devel/setup.bash
                          
                          # >>> fishros initialize >>>
                          echo "ros:foxy(1) noetic(2) ?"
                          read choose
                          case $choose in
                          1) source  /opt/ros/foxy/setup.bash;;
                          2) source  /opt/ros/noetic/setup.bash;;
                          esac
                          # <<< fishros initialize <<<
                          
                          小鱼小 1 条回复 最后回复 回复 引用 0
                          • 小鱼小
                            小鱼 技术大佬 @87725837
                            最后由 编辑

                            @87725837 在 ros2 foxy 自定义消息接口编译 “没有规则可制作目标” 中说:

                            source ~/realsense_ws/devel/setup.bash

                            请去掉这句后再次测试,这是ros1的命令,可能会环境变量产生很大影响

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

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

                              还是不行
                              这是我删掉bashrc里那句话后重新开的终端进行编译的结果:

                              ros:foxy(1) noetic(2) ?
                              1
                              oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ rm -r build/ log/ install/
                              oem@oem-ThinkPad-X1-Yoga-3rd:~/ros2_town$ colcon build --packages-select village_interfaces
                              Starting >>> village_interfaces
                              --- stderr: village_interfaces                             
                              make[1]: *** 没有规则可制作目标“village_interfaces__py/CMakeFiles/village_interfaces__py.dir/all”,由“CMakeFiles/village_interfaces__python.dir/all” 需求。 停止。
                              make[1]: *** 正在等待未完成的任务....
                              make: *** [Makefile:146:all] 错误 2
                              ---
                              Failed   <<< village_interfaces [2.33s, exited with code 2]
                              
                              Summary: 0 packages finished [2.71s]
                               1 package failed: village_interfaces
                               1 package had stderr output: village_interfaces
                              
                              1 条回复 最后回复 回复 引用 0
                              • 第一个帖子
                                最后一个帖子
                              皖ICP备16016415号-7
                              Powered by NodeBB | 鱼香ROS