cmvr-es/CMakeLists.txt

138 lines
4.8 KiB
CMake
Raw Normal View History

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)
# Install to <source>/output
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/output" CACHE PATH "" FORCE)
# Make build-tree binaries runnable without LD_LIBRARY_PATH
set(CMAKE_BUILD_RPATH "\$ORIGIN:\$ORIGIN/../lib")
set(CMAKE_INSTALL_RPATH "\$ORIGIN:\$ORIGIN/../lib")
# Use transitive RPATH so CLion can run build-tree test executables without
# manually setting LD_LIBRARY_PATH for indirect third-party dependencies.
add_link_options(-Wl,--disable-new-dtags)
set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
###########################################################
## DEPENDENCIES
#############################################################
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(FindExternalLib)
set(ARCH "x86")
setup_external_libs(${ARCH})
# 在调用 setup_external_libs 之后
message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
message(STATUS "CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}")
find_package(protobuf REQUIRED)
find_package(gRPC REQUIRED)
2025-12-05 16:33:11 +08:00
############################################################
2026-01-27 11:38:07 +08:00
# PROTO , 遇到proto 的生成问题现在build 目录执行 cmake --install . --verbose ,然后编译即可
############################################################
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)
2025-12-15 17:01:32 +08:00
2026-01-27 11:38:07 +08:00
set(Protobuf_PROTOC_EXECUTABLE "${CMAKE_INSTALL_PREFIX}/bin/protoc" CACHE FILEPATH "" FORCE)
set_property(TARGET gRPC::grpc_cpp_plugin
PROPERTY IMPORTED_LOCATION "${CMAKE_INSTALL_PREFIX}/bin/grpc_cpp_plugin"
)
2025-12-15 17:01:32 +08:00
# 1) 先做 OBJECT只负责生成/编译 pb.cc
add_library(proto-objects OBJECT)
target_sources(proto-objects PRIVATE ${PROTO_FILES})
set_target_properties(proto-objects PROPERTIES POSITION_INDEPENDENT_CODE ON)
protobuf_generate(
TARGET proto-objects
IMPORT_DIRS ${PROTO_IMPORT_DIR}
PROTOC_OUT_DIR ${PROTO_BINARY_DIR}
2025-12-15 17:01:32 +08:00
USAGE_REQUIREMENT PRIVATE
)
protobuf_generate(
TARGET proto-objects
LANGUAGE grpc
GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc
PLUGIN "protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>"
IMPORT_DIRS ${PROTO_IMPORT_DIR}
PROTOC_OUT_DIR ${PROTO_BINARY_DIR}
2025-12-15 17:01:32 +08:00
USAGE_REQUIREMENT PRIVATE
)
2025-12-15 17:01:32 +08:00
# 2) 把 OBJECT 打包成一个“唯一的”共享库(关键)
add_library(proto SHARED $<TARGET_OBJECTS:proto-objects>)
target_include_directories(proto PUBLIC ${PROTO_BINARY_DIR} ${PROTO_IMPORT_DIR} ${Protobuf_INCLUDE_DIRS})
2025-12-15 17:01:32 +08:00
target_link_libraries(proto PUBLIC protobuf::libprotobuf gRPC::grpc++ gRPC::grpc++_reflection)
add_library(cmvr_es::proto ALIAS proto)
2026-01-27 11:38:07 +08:00
#install(TARGETS proto RUNTIME DESTINATION bin)
install(TARGETS proto LIBRARY DESTINATION lib)
############################################################
# include
############################################################
include_directories(
/usr/local/include/
${PROTO_BINARY_DIR}
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/cmvr-es/devices
${PROJECT_SOURCE_DIR}/cmvr-es/utils
${PROJECT_SOURCE_DIR}/cmvr-es
${PROJECT_SOURCE_DIR}/dependency/${ARCH}/third_party
${PROJECT_SOURCE_DIR}/dependency/${ARCH}/third_party/osqp/v0.6.3/include/osqp
)
############################################################
# subdirectory
############################################################
add_subdirectory(cmvr-es)
############################################################
# executables
############################################################
add_executable(cmvr_es cmvr-es/main.cpp)
target_include_directories(cmvr_es PRIVATE ${GLOG_INCLUDE_DIRS})
target_link_libraries(cmvr_es PRIVATE
cmvr_es::runtime
2025-12-15 17:01:32 +08:00
cmvr_es::proto
2026-06-24 15:45:54 +08:00
cmvr_es::logging
service
${GLOG_LIBRARIES}
jsoncpp
cmvr_es::service
cmvr_es::hardware
cmvr_es::device::canbus
cmvr_es::device::ti5_canopen_motor_driver
2026-06-24 15:45:54 +08:00
cmvr_es::algorithms::controller
2025-11-10 16:54:06 +08:00
cmvr_es::ik_solver
2026-06-24 15:45:54 +08:00
cmvr_es::base_motion
cmvr_es::common
2026-06-24 15:45:54 +08:00
cmvr_es::task
cmvr_es::task_manager
ccd
fcl
)
install(TARGETS cmvr_es RUNTIME DESTINATION bin)
2026-06-24 15:45:54 +08:00
install(CODE [[
file(REMOVE_RECURSE
"${CMAKE_INSTALL_PREFIX}/bin/config"
"${CMAKE_INSTALL_PREFIX}/bin/model")
]])
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmvr-es/config DESTINATION bin)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/model DESTINATION bin)