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

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

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

      背景:

      [跟着网站的教程学ros2,因为我是ubuntu20.04,装了foxy版本]

      问题描述:

      在自定义消息接口那一节编译时出现了如下的问题:

      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.10s, exited with code 2]
      
      Summary: 0 packages finished [0.42s]
        1 package failed: village_interfaces
        1 package had stderr output: village_interfaces
      

      具体细节和上下文:

      • CMakeLists.txt和package.xml都按照教程里的描述做了修改,但是还是出现了这个报错

      尝试过的解决方法:

      • 网上搜不到和我相同情况的报错。但是用同学的电脑编译这个自定义消息的包成功了
      • 我电脑上还装了noetic,因为之前一直在用,有没有可能是这个引发的问题?(但是在打开终端时选择了source foxy的环境)
        -被这个问题折磨两天了,求救!!!!
      8 1 条回复 最后回复 回复 引用 0
      • 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