C++ 使用带有CMake接口库的Catkin
我目前尝试使用C++头文件库,作为CuKin中的CMAGE接口库。这个库应该被catkin_ws/src中的其他包使用。我能够用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”。图书馆 既不是目标,也未正确构建/安装。你们编译了这个项目吗 “接口库”?您在子目录之
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工作区彼此分开。然后将changecatkin 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>