cmake_minimum_required(VERSION 3.22.0) project(cmvr_es) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS -pthread) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # 查找依赖 list(APPEND CMAKE_PREFIX_PATH "$ENV{HOME}./local") ########################################################### ## DEPENDENCIES ############################################################# find_package(jsoncpp REQUIRED) find_package(protobuf REQUIRED) find_package(gRPC REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(GLOG REQUIRED libglog) ############################################################ # PROTO ############################################################ set(PROTO_IMPORT_DIR ${PROJECT_SOURCE_DIR}/protos) set(PROTO_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/_protobuf) file(MAKE_DIRECTORY ${PROTO_BINARY_DIR}) file(GLOB_RECURSE PROTO_FILES ${PROTO_IMPORT_DIR}/*.proto) add_library(proto-objects OBJECT ${PROTO_FILES}) message(STATUS "proto files will be loaded in ${PROTO_IMPORT_DIR}") message(STATUS "proto files will be generated in ${PROTO_BINARY_DIR}") protobuf_generate( TARGET proto-objects IMPORT_DIRS ${PROTO_IMPORT_DIR} PROTOC_OUT_DIR ${PROTO_BINARY_DIR} USAGE_REQUIREMENT INTERFACE ) protobuf_generate( TARGET proto-objects LANGUAGE grpc GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc PLUGIN "protoc-gen-grpc=$ENV{HOME}/.local/bin/grpc_cpp_plugin" USAGE_REQUIREMENT INTERFACE IMPORT_DIRS ${PROTO_IMPORT_DIR} PROTOC_OUT_DIR ${PROTO_BINARY_DIR} ) target_include_directories(proto-objects PUBLIC ${PROTO_BINARY_DIR} ${PROTO_IMPORT_DIR}) target_link_libraries(proto-objects PUBLIC protobuf::libprotobuf gRPC::grpc++ gRPC::grpc++_reflection) ############################################################ # include ############################################################ include_directories( /usr/include/opencv4 /usr/include/eigen3 /usr/local/include/osqp /usr/local/share/osqp/codegen_files/inc/private/ $ENV{HOME}/.local/include /usr/local/include/ ${PROTO_BINARY_DIR} ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src/devices ${PROJECT_SOURCE_DIR}/src/utils ${PROJECT_SOURCE_DIR}/third_party ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/third_party/toppra/0.6.2/include ) ############################################################ # subdirectory ############################################################ add_subdirectory(src) add_subdirectory(example) #add_subdirectory(test) ############################################################ # executables ############################################################ add_executable(cmvr_es src/main.cpp) target_include_directories(cmvr_es PRIVATE ${GLOG_INCLUDE_DIRS}) target_link_libraries(cmvr_es PRIVATE proto-objects service ${GLOG_LIBRARIES} gflags jsoncpp_lib cmvr_es::utils cmvr_es::service cmvr_es::monitor cmvr_es::hardware cmvr_es::httpclient cmvr_es::device::canbus cmvr_es::device::ti5motor cmvr_es::ctrl::controller cmvr_es::data_center cmvr_es::ik_solver cmvr_es::planner cmvr_es::device::humanoid_robot )