cmvr-es/CMakeLists.txt

129 lines
4.4 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 RUNPATH (new dtags) generally preferable
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)
############################################################
# 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)
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"
)
# 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}
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}
USAGE_REQUIREMENT PRIVATE
)
# 2) 把 OBJECT 打包成一个“唯一的”共享库(关键)
add_library(proto SHARED $<TARGET_OBJECTS:proto-objects>)
target_include_directories(proto PUBLIC ${PROTO_BINARY_DIR} ${PROTO_IMPORT_DIR} ${Protobuf_INCLUDE_DIRS})
target_link_libraries(proto PUBLIC protobuf::libprotobuf gRPC::grpc++ gRPC::grpc++_reflection)
add_library(cmvr_es::proto ALIAS proto)
#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::proto
service
${GLOG_LIBRARIES}
jsoncpp
cmvr_es::utils
cmvr_es::service
cmvr_es::monitor_manager
cmvr_es::hardware
cmvr_es::device::canbus
cmvr_es::device::ti5motor
cmvr_es::controller
cmvr_es::data_center
cmvr_es::ik_solver
cmvr_es::planner
cmvr_es::device::humanoid_robot
cmvr_es::common
cmvr_es::applications
)
install(TARGETS cmvr_es RUNTIME DESTINATION bin)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmvr-es/common/config DESTINATION bin)