ROS航海计划:P(二)

@catkin_make错误: Parse error. Expected a command name, got unquoted argument with text
“/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake”

编译环境及场景

在这里插入图片描述
Ubuntu18.04,ros melodic
文件夹test下src中的func_pkg为功能包,编译时,在test/下执行catkin_make命令

踩坑

搜索发现很多人遇到过 Parse error. Expected a command name, got unquoted argument with text……的错误,这个错误的意思是说cmakelist.txt 中的命令多了什么不应该出现的字符,但大家一般都是多了个空格之类的,而我的是/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake,这就很诡异.

分析与解决

使用catkin_make时,ros系统正常情况下会自动在test/src/func_pkg/下创建一个CMakeList.txt,并且symlink到系统的/opt/ros/(你的ros版本名称)/share/catkin/cmake/toplevel.cmake。

所以用vim打开test/src/func_pkg/CMakeList.txt,按理来说我会看到/opt/ros/melodic/share/catkin/cmake/toplevel.cmake,但我打开时,看到的是报错的那一句,也就是说出现了错误的ros版本名称kinetic.

在ros自动创建的CMakeList.txt中不应该出现这种错误,于是我直接打开了symlink路径下的toplevel.cmake文件,发现在我的这个路径下的toplevel.cmake里竟然就是这句/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake!

解决方法就是直接从其他地方拷贝一个相同的ros系统中原始的toplevel.cmake过来,就可以正常编译了!

p.s.真是一个暴哭,不知道什么时候竟然不小心改了系统文件,害得我好久没用过最初的catkin_make,很长一段时间直接catkin build……终于又回到最初的起点啦,哈哈

### 回答1: CMakeLists.txt文件中出现错误,错误信息为:在第一行中解析错误,期望命令名称,但是得到了未引用的参数,文本为“/opt/ros/melodic/share/catkin/cmake/toplevel.cmake”。 ### 回答2: CMake是一款开源的跨平台的自动化构建工具,可以用于编译源代码、生成可执行程序、库文件等。而在使用CMake构建工程的过程中,可能会出现一些错误,比如出现“cmake error at cmakelists.txt:1: parse error. expected a command name, got unquoted argument with text "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"。”这种错误。 这个错误是由于CMakeLists.txt文件中的第一行代码出现了问题导致的。提示信息中给出了具体的错误信息,即“parse error. expected a command name, got unquoted argument with text "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"。”翻译成中文意思就是解析错误,期望找到一个命令名称,但实际却得到了一个未引用的文本参数,其文本内容为"/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"。 那么这个错误如何解决呢?首先,我们需要找到这个CMakeLists.txt文件,查看第一行代码。如果第一行是 #!/usr/bin/cmake -H. -Bbuild 这样的指令,说明这是一个错误的代码,需要修改成正确的指令。正确的指令应该是: cmake_minimum_required(VERSION 2.8.3) project(<project_name>) # Find catkin and any catkin packages find_package(catkin REQUIRED COMPONENTS <component1> <component2> ...) # Declare a catkin package catkin_package() # Build include_directories(include ${catkin_INCLUDE_DIRS}) # Install install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} PATTERN "*.launch" PERMISSIONS +x) 其中,<project_name>是你的项目名称,<component1>、<component2>等是需要依赖的组件,可以根据实际情况修改。当然,这只是一个示例代码,具体的代码需要根据项目的实际情况而定。只要你的CMakeLists.txt文件中的第一行是这样的正确指令,就可以避免出现类似的错误了。 ### 回答3: cmakelists.txt 是一个 CMake 工程文件,用于生成可执行文件、库以及其他构建目标。在 CMakeLists.txt 文件的第一行遇到错误:“parse error. expected a command name,got unquoted argument with text "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"。”这是因为 CMakeLists.txt 文件中包含了一个未预期的参数,不存在匹配的命令名,导致出现语法错误。 在这种情况下,通常的解决方案是检查 CMakeLists.txt 文件中的错误,特别是第一行的错误。这可能涉及到检查是否存在缺失的命令、拼写错误、语法错误等。 在这个错误的情况下,"/opt/ros/melodic/share/catkin/cmake/toplevel.cmake" 是一个路径名,可能是在配置 ROS 环境时添加的路径。这个路径名被错误地解析为一个未引用的参数,解析器无法将其与任何命令匹配,导致出现语法错误。 解决这个问题通常需要找到 CMakeLists.txt 文件中的问题,首先查看文件的第一行,并检查文件中的任何其他错误。在这种情况下,可以尝试注释掉第一行中的错误参数,或修复参数并确保其与任何命令一起使用时都被正确引用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steptoward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值