2015-07-17 2 views
0

Итак, я пытаюсь следовать примеру того, как добавить тему, используя подписную службу Gazebo. Увы, одним из шагов является создание объекта protobuf и, к сожалению, мой класс protobuff просто не будет компилироваться, когда я запускаю CMake. Вот то, что я до сих пор:Почему CMake не компилирует этот класс protobuff?

import "vector3d.proto"; 

message ModelVelResponse 
{ 
    required AVelV angularVel = 1; 
    required LVelV linearVel = 2; 
} 

message AVelV{ 
    repeated gazebo.msgs.Vector3d angularVel = 1; 
} 

message LVelV{ 
    repeated gazebo.msgs.Vector3d linearVel = 1; 
} 

и вот мой CMake файл

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 

find_package(Protobuf REQUIRED) 

set(PROTOBUF_IMPORT_DIRS) 
foreach(ITR ${GAZEBO_INCLUDE_DIRS}) 
    if(ITR MATCHES ".*gazebo-[0-9.]+$") 
    set(PROTOBUF_IMPORT_DIRS "${ITR}/gazebo/msgs/proto") 
    endif() 
endforeach() 

set (msgs 
    velocity_message.proto 
    ${PROTOBUF_IMPORT_DIRS}/vector3d.proto 
    ${PROTOBUF_IMPORT_DIRS}/header.proto 
    ${PROTOBUF_IMPORT_DIRS}/time.proto 
) 
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${msgs}) 
add_library(velocity_msgs SHARED ${PROTO_SRCS}) 
target_link_libraries(velocity_msgs ${PROTOBUF_LIBRARY}) 

find_package(Boost REQUIRED COMPONENTS system) 
include_directories(${Boost_INCLUDE_DIRS}) 
link_directories(${Boost_LIBRARY_DIRS}) 

include (FindPkgConfig) 
if (PKG_CONFIG_FOUND) 
    pkg_check_modules(GAZEBO gazebo) 
endif() 
include_directories(${GAZEBO_INCLUDE_DIRS}) 
link_directories(${GAZEBO_LIBRARY_DIRS}) 

add_library(model_vel SHARED model_vel.cc) 
target_link_libraries(model_vel ${GAZEBO_LIBRARIES} ${Boost_LIBRARIES}) 

Любая идея, что я делаю неправильно? Мой файл protobuf в подкаталоге msgs, но когда я перемещаю код, который, как предполагается, генерирует protobuf libs в подкаталог, он все равно не скомпилируется. Это также не вызывает никаких ошибок.

Обновление: Я основываю свой код на this учебник.

+0

Каково фактическое сообщение об ошибке? Почему вы думаете, что это проблема CMake, а не проблема C++? – usr1234567

ответ

0

Я решил эту проблему, изменив файл грим так:

find_package(Protobuf REQUIRED) 


set(PROTOBUF_IMPORT_DIRS) 
foreach(ITR ${GAZEBO_INCLUDE_DIRS}) 
    if(ITR MATCHES ".*gazebo-[0-9.]+$") 
    set(PROTOBUF_IMPORT_DIRS "${ITR}/gazebo/msgs/proto") 
    endif() 
endforeach() 

    set (msgs 
     velocity_message.proto 
     ${PROTOBUF_IMPORT_DIRS}/vector3d.proto 
     ${PROTOBUF_IMPORT_DIRS}/header.proto 
     ${PROTOBUF_IMPORT_DIRS}/time.proto 
    ) 
    PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${msgs}) 
    add_library(velocity_msgs SHARED ${PROTO_SRCS}) 
    target_link_libraries(velocity_msgs ${PROTOBUF_LIBRARY}) 

Я просто должен был добавить его в качестве общей библиотеки.