首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与CMake接口库结合使用Catkin

与CMake接口库结合使用Catkin
EN

Stack Overflow用户
提问于 2018-11-12 17:53:05
回答 2查看 3.2K关注 0票数 2

我目前正在尝试使用c++头专用库,声明为catkin中的cmake接口库。这个库应该由catkin_ws/src中的其他包使用。我能够用catkin_make编译所有的包,但不能用catkin build编译。

catkin build在依赖包中的cmake命令find_package(... interface_lib)中失败。

下面示例的错误消息将是:

Project 'testnode‘试图找到库'interface_ library’。库既不是目标,也不是构建/安装正确的。您编译了项目“接口_库”吗?在包含其代码的子目录之前,您是否使用了find_package()?

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

最起码的例子:

接口库

文件: catkin_ws/src/interface_library/include/interface_library.hpp

代码语言:javascript
复制
#pragma once

#define RATE 10

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
<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>

测试节点

文件: catkin_ws/src/testnode/src/testnode.cpp

代码语言:javascript
复制
#include <iostream>
#include "interface_library.hpp"

int main(void)
{
  std::cout << RATE << std::endl;
}

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-20 08:56:01

我刚刚遇到了这个问题。修复方法是将LIBRARIES ${PROJECT_NAME}行从文件接口_ catkin_package /CMakeLists.txt中删除。

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

票数 3
EN

Stack Overflow用户

发布于 2018-11-21 16:15:02

旧的catkin或catkin_make使用合并的开发空间,而较新的catkin或catkin build默认使用链接的开发空间。

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

catkin config --merge-devel

此外,还手动将其搜索区域扩展到您的主ROS文件夹(默认为/opt/ros/<your-version>)和其他可以与您一起使用的catkin工作区:

catkin config --expand <path-to-ros-workspace>

在此之后,添加项目和构建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53267571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档