cmake_minimum_required(VERSION 3.10.2) project(robot_time) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Cấu hình RPATH để tránh cycle trong runtime search path set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}") # ======================================================== # Find Packages # ======================================================== if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) set(BUILDING_WITH_CATKIN TRUE) message(STATUS "Building robot_time with Catkin") else() set(BUILDING_WITH_CATKIN FALSE) message(STATUS "Building robot_time with Standalone CMake") endif() if(BUILDING_WITH_CATKIN) find_package(catkin REQUIRED) endif() find_package(GTest REQUIRED) # ======================================================== # Catkin specific configuration # ======================================================== if(BUILDING_WITH_CATKIN) ## The catkin_package macro generates cmake config files for your package catkin_package( INCLUDE_DIRS include LIBRARIES robot_time ) endif() include_directories(${GTEST_INCLUDE_DIRS}) if(BUILDING_WITH_CATKIN) include_directories(${catkin_INCLUDE_DIRS}) endif() add_library(robot_time src/duration.cpp src/rate.cpp src/time.cpp) target_include_directories(robot_time PUBLIC $ $) set_target_properties(robot_time PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} BUILD_RPATH "${CMAKE_BINARY_DIR}" INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) ## Add cmake target dependencies if(BUILDING_WITH_CATKIN) add_dependencies(robot_time ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) endif() # Export target trong mọi trường hợp để các target khác có thể export và phụ thuộc vào nó install(TARGETS robot_time EXPORT robot_timeTargets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) if(NOT BUILDING_WITH_CATKIN) install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h") endif() # Export targets - cần trong mọi trường hợp install(EXPORT robot_timeTargets NAMESPACE robot:: DESTINATION lib/cmake/robot_time) add_executable(robot_time_test test/time.cpp) add_executable(robot_duration_test test/duration.cpp) target_link_libraries(robot_time_test PRIVATE robot_time ${GTEST_LIBRARIES} GTest::GTest GTest::Main) target_link_libraries(robot_duration_test PRIVATE robot_time ${GTEST_LIBRARIES} GTest::GTest GTest::Main)