编译环境及场景
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……终于又回到最初的起点啦,哈哈