cmake_minimum_required(VERSION 3.8)

# 设置 C++ 标准（可选，如果主项目未设置）
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 源文件
set(SOURCES
    protobuf/sc_manager.pb.cc
    protobuf/eigen_matrix.pb.cc
    protobuf/eigen_proto_utils.cpp
    file_system/file_path.cc
    lidar_utils/utils.cpp
    map/map_manager.cc
)

# 创建静态库（默认）或动态库（SHARED）
add_library(common ${SOURCES})

# target_link_libraries(common PRIVATE)

# 设置头文件路径
target_include_directories(common
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
)

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

# 如果 utils 依赖其他库（如 Eigen, PCL 等），在这里链接
find_package(ament_cmake REQUIRED)
find_package(tf2 REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(Protobuf REQUIRED)
find_package(PCL REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(std_msgs REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(livox_ros_driver2 REQUIRED)

include_directories(${PROTOBUF_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
target_link_libraries(common protobuf::libprotobuf ${PCL_LIBRARIES} glog)
ament_target_dependencies(common rclcpp std_msgs tf2 tf2_ros nav_msgs sensor_msgs livox_ros_driver2 pcl_conversions geometry_msgs)

# 设置库属性（可选）
set_target_properties(common PROPERTIES
    VERSION 1.0.0
    SOVERSION 1
)

add_executable(test_eigen_proto
    protobuf/test_eigen_proto.cpp
    protobuf/eigen_proto_utils.cpp
    protobuf/eigen_matrix.pb.cc # 包含 eigen_matrix.pb.cc
)

target_link_libraries(test_eigen_proto
        protobuf::libprotobuf
        Eigen3::Eigen
)
