带有 CMakeLists 的协议缓冲区
Protocol Buffer with CMakeLists
我有一个项目,其父目录下有 src
、include
和一些较旧的文件夹。我创建了一个名为 proto
的文件夹,其中包含我的 VisionData.proto
。我想生成预期的输出文件,但它不起作用。我查看了 it 的官方网站并做了他们在那里写的任何事情,但仍然没有运气。这是我的 CMakeLists:
cmake_minimum_required(VERSION 2.8.3)
project(uwsim_imgproc)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
sensor_msgs
std_msgs
image_transport
)
find_package(OpenCV REQUIRED)
find_package(Protobuf REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES uwsim_imgproc filters
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
# DEPENDS system_lib
)
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
set(PROTOBUF_LIBRARIES ${PROTOBUF_LIBRARIES} PARENT_SCOPE)
set(PROTO_SRC ${PROTO_SRC} PARENT_SCOPE)
set(PROTO_HEADER ${PROTO_HEADER} PARENT_SCOPE)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS VisionData.proto)
include_directories(
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
include
)
link_directories(
${OpenCV_LINK_DIRS}
)
add_library(filters
src/Obstacle.cpp
src/HorizonDetector.cpp
src/GenericTools.cpp
src/Kalman.cpp
src/HungarianAlg.cpp
src/Ctracker.cpp
)
add_executable(cameraSubscriber src/main.cpp)
add_executable(VisionData VisionData.cc ${PROTO_SRCS} ${PROTO_HDRS})
add_dependencies(cameraSubscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(VisionData
${PROTOBUF_LIBRARIES}
)
target_link_libraries(filters
${OpenCV_LIBRARIES}
)
target_link_libraries(cameraSubscriber
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
filters
)
我收到的错误信息是:
CMake Error at uwsim_imgproc/CMakeLists.txt:60 (add_executable):
Cannot find source file:
VisionData.cc
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
如有任何帮助,我们将不胜感激。
更新:
修复了错误的问题,但是,我的 CMakeLists 没有生成任何应该生成的 .h 或 .cc 文件。
cmake_minimum_required(VERSION 2.8.3)
project(uwsim_imgproc)
include(FindProtobuf)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
sensor_msgs
std_msgs
image_transport
)
find_package(OpenCV REQUIRED)
find_package(Protobuf REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES uwsim_imgproc filters
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
# DEPENDS system_lib
)
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
set(PROTOBUF_LIBRARIES ${PROTOBUF_LIBRARIES} PARENT_SCOPE)
set(PROTO_SRC ${PROTO_SRC} PARENT_SCOPE)
set(PROTO_HEADER ${PROTO_HEADER} PARENT_SCOPE)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS proto/VisionData.proto)
include_directories(
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
include
)
link_directories(
${OpenCV_LINK_DIRS}
)
add_library(filters
src/Obstacle.cpp
src/HorizonDetector.cpp
src/GenericTools.cpp
src/Kalman.cpp
src/HungarianAlg.cpp
src/Ctracker.cpp
)
add_executable(cameraSubscriber src/main.cpp ${PROTO_SRCS} ${PROTO_HDRS})
add_dependencies(cameraSubscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(cameraSubscriber
${PROTOBUF_LIBRARIES}
)
target_link_libraries(filters
${OpenCV_LIBRARIES}
)
target_link_libraries(cameraSubscriber
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
filters
)
protobuf_generate_cpp()
生成的源文件的名称以 PROTO_SRCS
结尾。
这个文件可能会在 CMAKE_BINARY_DIR
中生成(因为 CMake 的政策是不在源目录中生成文件)。
此文件可能遵循一些您不必知道的内部命名方案。
所以你的台词...
add_executable(VisionData VisionData.cc ${PROTO_SRCS} ${PROTO_HDRS})
...应该没有 VisionData.cc
在里面。
我有一个项目,其父目录下有 src
、include
和一些较旧的文件夹。我创建了一个名为 proto
的文件夹,其中包含我的 VisionData.proto
。我想生成预期的输出文件,但它不起作用。我查看了 it 的官方网站并做了他们在那里写的任何事情,但仍然没有运气。这是我的 CMakeLists:
cmake_minimum_required(VERSION 2.8.3)
project(uwsim_imgproc)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
sensor_msgs
std_msgs
image_transport
)
find_package(OpenCV REQUIRED)
find_package(Protobuf REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES uwsim_imgproc filters
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
# DEPENDS system_lib
)
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
set(PROTOBUF_LIBRARIES ${PROTOBUF_LIBRARIES} PARENT_SCOPE)
set(PROTO_SRC ${PROTO_SRC} PARENT_SCOPE)
set(PROTO_HEADER ${PROTO_HEADER} PARENT_SCOPE)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS VisionData.proto)
include_directories(
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
include
)
link_directories(
${OpenCV_LINK_DIRS}
)
add_library(filters
src/Obstacle.cpp
src/HorizonDetector.cpp
src/GenericTools.cpp
src/Kalman.cpp
src/HungarianAlg.cpp
src/Ctracker.cpp
)
add_executable(cameraSubscriber src/main.cpp)
add_executable(VisionData VisionData.cc ${PROTO_SRCS} ${PROTO_HDRS})
add_dependencies(cameraSubscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(VisionData
${PROTOBUF_LIBRARIES}
)
target_link_libraries(filters
${OpenCV_LIBRARIES}
)
target_link_libraries(cameraSubscriber
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
filters
)
我收到的错误信息是:
CMake Error at uwsim_imgproc/CMakeLists.txt:60 (add_executable):
Cannot find source file:
VisionData.cc
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
如有任何帮助,我们将不胜感激。
更新:
修复了错误的问题,但是,我的 CMakeLists 没有生成任何应该生成的 .h 或 .cc 文件。
cmake_minimum_required(VERSION 2.8.3)
project(uwsim_imgproc)
include(FindProtobuf)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
sensor_msgs
std_msgs
image_transport
)
find_package(OpenCV REQUIRED)
find_package(Protobuf REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES uwsim_imgproc filters
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
# DEPENDS system_lib
)
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
set(PROTOBUF_LIBRARIES ${PROTOBUF_LIBRARIES} PARENT_SCOPE)
set(PROTO_SRC ${PROTO_SRC} PARENT_SCOPE)
set(PROTO_HEADER ${PROTO_HEADER} PARENT_SCOPE)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS proto/VisionData.proto)
include_directories(
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
include
)
link_directories(
${OpenCV_LINK_DIRS}
)
add_library(filters
src/Obstacle.cpp
src/HorizonDetector.cpp
src/GenericTools.cpp
src/Kalman.cpp
src/HungarianAlg.cpp
src/Ctracker.cpp
)
add_executable(cameraSubscriber src/main.cpp ${PROTO_SRCS} ${PROTO_HDRS})
add_dependencies(cameraSubscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(cameraSubscriber
${PROTOBUF_LIBRARIES}
)
target_link_libraries(filters
${OpenCV_LIBRARIES}
)
target_link_libraries(cameraSubscriber
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
filters
)
protobuf_generate_cpp()
生成的源文件的名称以 PROTO_SRCS
结尾。
这个文件可能会在
CMAKE_BINARY_DIR
中生成(因为 CMake 的政策是不在源目录中生成文件)。此文件可能遵循一些您不必知道的内部命名方案。
所以你的台词...
add_executable(VisionData VisionData.cc ${PROTO_SRCS} ${PROTO_HDRS})
...应该没有 VisionData.cc
在里面。