В настоящее время я пытаюсь использовать библиотеку c ++ только для заголовков, объявленную как библиотека интерфейса cmake в catkin. Предполагается, что эта библиотека будет использоваться другими пакетами в catkin_ws / src . Я смог скомпилировать все пакеты с catkin_make
, но не с catkin build
.
catkin build
завершается ошибкой в команде cmake find_package(... interface_lib)
в зависимых пакетах.
Сообщение об ошибке для приведенного ниже примера будет:
Проект 'testnode' попытался найти библиотеку 'interface_library'. Библиотека
не является ни целью, ни построен / установлен правильно. Вы скомпилировали проект?
'Interface_library'? Вы нашли _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>
Testnode
Файл: 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 / package.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>