我目前正在尝试使用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
#pragma once
#define RATE 10文件: catkin_ws/src/interface_library/CMakeLists.txt
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
<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
#include <iostream>
#include "interface_library.hpp"
int main(void)
{
std::cout << RATE << std::endl;
}文件: catkin_ws/src/testnode/CMakeLists.txt
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
<?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>发布于 2019-06-20 08:56:01
我刚刚遇到了这个问题。修复方法是将LIBRARIES ${PROJECT_NAME}行从文件接口_ catkin_package /CMakeLists.txt中删除。
这个答案提到,LIBRARIES行要求您实际构建一个目标( 文献资料说,如果目标名称与已安装的名称不对应,它目前会中断),所以我猜它目前并不是为了处理接口库而编写的。
发布于 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>
在此之后,添加项目和构建。
https://stackoverflow.com/questions/53267571
复制相似问题