diff --git a/CMakeLists.txt b/CMakeLists.txt index 8be9313..a2f7e9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,52 @@ cmake_minimum_required(VERSION 3.10.2) -project(robot_time LANGUAGES CXX) +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 @@ -19,18 +56,31 @@ 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) -install(DIRECTORY include/ - DESTINATION include - FILES_MATCHING PATTERN "*.h") +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) @@ -38,12 +88,12 @@ install(EXPORT robot_timeTargets 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) + robot_time + ${GTEST_LIBRARIES} + GTest::GTest + GTest::Main) + target_link_libraries(robot_duration_test PRIVATE + robot_time + ${GTEST_LIBRARIES} + GTest::GTest + GTest::Main) diff --git a/package.xml b/package.xml index 584d0a3..4a733d5 100644 --- a/package.xml +++ b/package.xml @@ -18,9 +18,4 @@ http://www.ros.org/wiki/robot_time catkin - - libconsole-bridge-dev - - libconsole-bridge-dev - \ No newline at end of file