C++ 使用带有CMake接口库的Catkin

C++ 使用带有CMake接口库的Catkin,c++,cmake,ros,catkin,C++,Cmake,Ros,Catkin,我目前尝试使用C++头文件库,作为CuKin中的CMAGE接口库。这个库应该被catkin_ws/src中的其他包使用。我能够用catkin\u make编译所有包,但不能用catkin build编译 catkin build在cmake命令中失败find_-package(…interface_-lib) 以下示例的错误消息为: 项目“testnode”尝试查找库“interface\u library”。图书馆 既不是目标,也未正确构建/安装。你们编译了这个项目吗 “接口库”?您在子目录之

我目前尝试使用C++头文件库,作为CuKin中的CMAGE接口库。这个库应该被catkin_ws/src中的其他包使用。我能够用
catkin\u make
编译所有包,但不能用
catkin build
编译

catkin build
在cmake命令中失败
find_-package(…interface_-lib)

以下示例的错误消息为:

项目“testnode”尝试查找库“interface\u library”。图书馆 既不是目标,也未正确构建/安装。你们编译了这个项目吗 “接口库”?您在子目录之前找到它了吗 是否包含其代码

我需要如何设置CMakeLists.txt和package.xml文件以使catkin build与接口库一起工作

最简单的例子: 接口库 文件:catkin_ws/src/interface_library/include/interface_library.hpp

文件:catkin_ws/src/interface_library/CMakeLists.txt

文件:catkin_ws/src/interface_library/package.xml

文件:catkin_ws/src/testnode/package.xml


测试节点
0.0.0
testnode包
灾难大师
麻省理工学院
柳絮
接口库
接口库
接口库

旧的catkin或
catkin\u make
使用合并的开发空间,但默认情况下,新的catkin或
catkin build
使用链接的开发空间

您应该做的第一件事是在两个不同的文件夹中将catkin工作区彼此分开。然后将change
catkin build
的工作区设置为与以下对象合并:

catkin配置--合并devel

还可以手动将其搜索区域扩展到您的主ROS文件夹(默认设置为
/opt/ROS/
)和您可以使用的其他catkin工作区:

catkin配置--展开


然后添加您的项目并构建。

我刚刚遇到了这个问题。修复方法是从文件接口\u library/CMakeLists.txt中的
catkin\u包
中删除行
LIBRARIES${PROJECT\u NAME}

提到
LIBRARIES
行要求您实际构建一个目标(并且说如果目标名称与安装的名称不对应,它当前会中断),所以我猜它当前不是为了处理接口库而编写的

#pragma once

#define RATE 10
cmake_minimum_required(VERSION 3.0.0)
project(interface_library)

find_package(catkin REQUIRED)

catkin_package(INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME})

add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(${PROJECT_NAME} INTERFACE include)
<package format="2">
  <name>interface_library</name>
  <description>Test interface library</description>
  <version>0.0.1</version>
  <maintainer email="master@disaster.com">Master of Disaster</maintainer>
  <license>MIT</license>
  <buildtool_depend>catkin</buildtool_depend>
</package>
#include <iostream>
#include "interface_library.hpp"

int main(void)
{
  std::cout << RATE << std::endl;
}
cmake_minimum_required(VERSION 3.0.0)
project(testnode)

find_package(catkin REQUIRED COMPONENTS interface_library)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})

add_executable(${PROJECT_NAME}_node src/testnode.cpp)
<?xml version="1.0"?>
<package format="2">
  <name>testnode</name>
  <version>0.0.0</version>
  <description>The testnode package</description>
  <maintainer email="master@disaster.com">Master of Disaster</maintainer>
  <license>MIT</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>interface_library</build_depend>
  <build_export_depend>interface_library</build_export_depend>
  <exec_depend>interface_library</exec_depend>
</package>