ROS Kinetic 'catkin_make' 失败,因为 PROJECT_NAME 设置为项目

ROS Kinetic 'catkin_make' Fails because PROJECT_NAME is set to Project

我使用 ROS Kinetic 有一段时间了,今天当我按照 ROS 教程页面 (http://wiki.ros.org/catkin/Tutorials/create_a_workspace) 创建一个新的 catkin 工作区时,我收到一个 CMake 错误,指出 PROJECT_NAME设置为项目,这是无效的。对于我创建的任何其他工作空间,我从未 运行 遇到过这个问题。

我不想乱用 toplevel.cmake,因为害怕搞砸我的其他工作空间。

知道为什么会这样吗?

CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:91 (message):
  catkin_package() PROJECT_NAME is set to 'Project', which is not a valid
  project name.  You must call project() before calling catkin_package().

谢谢。

我能够重现您遇到的上述错误。为此,我所做的是打开 CMakeLists.txt 并注释定义包名称的第二行,即 project(package_name)。之后,我尝试通过 catkin_make 构建我的包,但出现以下错误(请参阅黄色框内的错误):

然后,我尝试在取消注释以上行后构建相同的包。这次我能够成功地构建我的包(测试,在我的例子中),没有任何错误。

CMakeLists.txt 文件包含 project()catkin_package(),前一个函数应该在文件内的 catkin_package() 之前调用。因此,project(package_name) 要么从您的 CMakeLists.txt 文件中丢失,要么被注释掉。

如果缺少,则手动添加。如果它在那里,但评论然后取消评论。

here 阅读更多关于 CMakeLists.txt 文件正确格式的信息。

具有讽刺意味的是,您将成为 运行 : sudo apt-get install ros-<distro_name>-catkin to reinstall catkin 因为即使您清除了整个工作区,由于某些符号 link 或包中损坏的东西,问题仍将存在总是会导致相同的错误,在重新安装 catkin 后它对我有用,因为我知道我遇到了完全相同的问题。

不得不来回答这个问题,因为我想我和 OP 做了同样的事情。事情是这样的:您的项目文件夹中应该有 TWO CMakeLists.txt。一个位于 ProjectName/src,应该是只读的,实际上应该是 link 到您的 /opt/ros/your-ros-distro/share/catkin/cmake/toplevel.cmake 文件夹。

如果你像我一样,我假设像 OP 一样,编辑那个文件,然后使用你的超级用户覆盖那个文件,那么你是( 1) 破坏你所有的 catkin 项目,因为 ALL 的 catkin 项目 link 到这个文件,AND 你配置错误这个项目是因为您 应该 修改的 CMakeLists.txt 文件实际上存在于更深的文件夹中,位于 ProjectName/src/ProjectName/。这是您应该放置命名项目的 CMakeLists.txt 文件的位置,您的 package.xml 文件应该放在的位置,等等。

如果您使用超级用户强制覆盖只读 CMakeLists.txt 文件,那么您将有糟糕的一天。幸运的是,您可以通过修复 toplevel.cmake 文件夹来修复该文件,您可以通过重新安装 catkin 包来修复该文件:sudo apt-get install --reinstall ros-indigo-catkin

而且,根据 OP 的问题具体说明 - project() 需要在内部文件 ProjectName/src/ProjectName/CMakeLists.txt 中命名,因为根文件又是 只读且永远不应修改。