Skip to content

Instantly share code, notes, and snippets.

@lix19937
Last active June 5, 2025 01:13
Show Gist options
  • Save lix19937/e93ab407e11dd5391ce420eda845bebc to your computer and use it in GitHub Desktop.
Save lix19937/e93ab407e11dd5391ce420eda845bebc to your computer and use it in GitHub Desktop.
proto_cc.CMakeLists
#
# by ljw 20250521
#
# compile protos to a shared lib
#
cmake_minimum_required(VERSION 3.12)
project(adc_proto)
find_package(Protobuf REQUIRED)
file(GLOB_RECURSE PROTO_FILES
"common/*.proto"
"control/*.proto"
# "hmi/*.proto"
"localization/*.proto"
"map/*.proto"
"nni/*.proto"
"perception/*.proto"
"planning/*.proto"
"sensors/*.proto"
"simulation/*.proto"
"statemachine/*.proto"
"vehicle/*.proto"
)
set(LIB_NAME adc_proto)
set(CMAKE_BUILD_TYPE Release)
set(GENERATED_PROTO_SRCS)
set(GENERATED_PROTO_HDRS)
set(GENERATED_CC_DIR ${CMAKE_CURRENT_BINARY_DIR}/tmp)
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/${CMAKE_BUILD_TYPE}/${RUN_PLATFORM})
file(MAKE_DIRECTORY ${GENERATED_CC_DIR})
include_directories(${GENERATED_CC_DIR})
include_directories(${Protobuf_INCLUDE_DIRS})
foreach(PROTO_FILE ${PROTO_FILES})
get_filename_component(ABS_PATH ${PROTO_FILE} ABSOLUTE)
get_filename_component(FILENAME_WE ${PROTO_FILE} NAME_WE)
get_filename_component(CURRENT_DIR ${PROTO_FILE} DIRECTORY)
get_filename_component(LAST_DIR ${CURRENT_DIR} NAME)
set(GENERATED_SRC "${GENERATED_CC_DIR}/${LAST_DIR}/${FILENAME_WE}.pb.cc")
set(GENERATED_HDR "${GENERATED_CC_DIR}/${LAST_DIR}/${FILENAME_WE}.pb.h")
add_custom_command(
OUTPUT ${GENERATED_SRC} ${GENERATED_HDR}
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
ARGS --cpp_out=${GENERATED_CC_DIR}
-I${CMAKE_CURRENT_SOURCE_DIR} ${ABS_PATH}
DEPENDS ${ABS_PATH}
)
list(APPEND GENERATED_PROTO_SRCS ${GENERATED_SRC})
list(APPEND GENERATED_PROTO_HDRS ${GENERATED_HDR})
endforeach()
add_library(${LIB_NAME} SHARED ${GENERATED_PROTO_SRCS} ${GENERATED_PROTO_HDRS})
target_link_libraries(${LIB_NAME} ${Protobuf_LIBRARIES})
foreach(PROTO_HDR ${GENERATED_PROTO_HDRS})
get_filename_component(CURRENT_DIR ${PROTO_HDR} DIRECTORY)
get_filename_component(LAST_DIR ${CURRENT_DIR} NAME)
install(FILES ${PROTO_HDR} DESTINATION include/${LAST_DIR})
endforeach()
install(TARGETS ${LIB_NAME} LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment