Skip to content

Commit c41855b

Browse files
committed
Tweaked cmake configuration so that it installs libraries as components of ergocub-cartesian-control
1 parent e63c149 commit c41855b

File tree

8 files changed

+1089
-80
lines changed

8 files changed

+1089
-80
lines changed

CMakeLists.txt

+30-1
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,33 @@ add_subdirectory(src/r1_cartesian_control)
3232

3333

3434
# Add standard uninstall target
35-
include(AddUninstallTarget)
35+
include(AddUninstallTarget)
36+
37+
# Configure package config file to support components
38+
include(CMakePackageConfigHelpers)
39+
40+
# Create the config file
41+
configure_file(
42+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
43+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
44+
@ONLY
45+
)
46+
47+
# Write version file
48+
write_basic_package_version_file(
49+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
50+
VERSION ${PROJECT_VERSION}
51+
COMPATIBILITY SameMajorVersion
52+
)
53+
54+
# Install export targets
55+
install(EXPORT ${PROJECT_NAME}Targets
56+
FILE ${PROJECT_NAME}Targets.cmake
57+
NAMESPACE ${PROJECT_NAME}::
58+
DESTINATION lib/cmake/${PROJECT_NAME}
59+
)
60+
61+
install(FILES
62+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
63+
DESTINATION lib/cmake/${PROJECT_NAME}
64+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
@PACKAGE_INIT@
2+
3+
# Declare the components
4+
set(_supported_components
5+
utils
6+
cub-joint-control
7+
trajectory-generator
8+
gb-ergocub-cartesian-service
9+
)
10+
11+
# Handle components
12+
foreach(_comp ${@PROJECT_NAME@_FIND_COMPONENTS})
13+
if(NOT _comp IN_LIST _supported_components)
14+
set(@PROJECT_NAME@_FOUND FALSE)
15+
set(@PROJECT_NAME@_NOTFOUND_MESSAGE "Unsupported component: ${_comp}")
16+
return()
17+
endif()
18+
19+
# Include the component's config file if it exists
20+
include(${CMAKE_CURRENT_LIST_DIR}/${_comp}Config.cmake OPTIONAL)
21+
22+
# Include component targets
23+
include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake OPTIONAL)
24+
endforeach()
25+
26+
# Check dependencies
27+
include(CMakeFindDependencyMacro)
28+
find_dependency(YARP COMPONENTS dev os)
29+
find_dependency(Eigen3)

src/cub_joint_control/CMakeLists.txt

+25-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
set(LIBRARY_TARGET_NAME cub-joint-control)
22

33
# YARP
4-
find_package(YARP REQUIRED COMPONENTS idl_tools sig)
4+
find_package(YARP REQUIRED COMPONENTS dev os)
55

66
# Eigen3
77
find_package(Eigen3 REQUIRED)
@@ -19,12 +19,33 @@ set(${LIBRARY_TARGET_NAME}_SRC
1919
add_library(${LIBRARY_TARGET_NAME} STATIC ${${LIBRARY_TARGET_NAME}_SRC} ${${LIBRARY_TARGET_NAME}_HDR})
2020

2121
# Library properties
22-
set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES VERSION ${${PROJECT_NAME}_VERSION}
23-
PUBLIC_HEADER "${${LIBRARY_TARGET_NAME}_HDR}")
22+
set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES
23+
VERSION ${${PROJECT_NAME}_VERSION}
24+
PUBLIC_HEADER "${${LIBRARY_TARGET_NAME}_HDR}"
25+
EXPORT_NAME cub-joint-control # Set consistent export name
26+
)
2427

2528
# Include directories
2629
target_include_directories(${LIBRARY_TARGET_NAME} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
2730
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
2831

2932
# Linker configuration
30-
target_link_libraries(${LIBRARY_TARGET_NAME} PUBLIC YARP::YARP_os YARP::YARP_sig Eigen3::Eigen utils)
33+
target_link_libraries(${LIBRARY_TARGET_NAME} PUBLIC YARP::YARP_os YARP::YARP_sig Eigen3::Eigen
34+
PRIVATE utils)
35+
36+
37+
# Install the headers explicitly to ensure they're available
38+
install(
39+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
40+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
41+
FILES_MATCHING PATTERN "*.h"
42+
)
43+
44+
45+
# Export the target to a different export set than the one used for installation
46+
install(TARGETS ${LIBRARY_TARGET_NAME}
47+
EXPORT ${PROJECT_NAME}Targets # Use the parent project's export name
48+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
49+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
50+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_TARGET_NAME}" COMPONENT dev
51+
)

src/ergocub_cartesian_service/CMakeLists.txt

+17-19
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ set(${LIBRARY_TARGET_NAME}_SRC
3636
add_library(${LIBRARY_TARGET_NAME} ${${LIBRARY_TARGET_NAME}_SRC} ${${LIBRARY_TARGET_NAME}_HDR})
3737

3838
# Library properties
39-
set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES VERSION ${${PROJECT_NAME}_VERSION}
40-
PUBLIC_HEADER "${${LIBRARY_TARGET_NAME}_HDR}")
39+
set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES
40+
PUBLIC_HEADER "${headers}"
41+
EXPORT_NAME ${LIBRARY_TARGET_NAME} # Set consistent export name
42+
)
4143

4244
# Include directories
4345
target_include_directories(${LIBRARY_TARGET_NAME} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
@@ -46,22 +48,18 @@ target_include_directories(${LIBRARY_TARGET_NAME} PUBLIC "$<BUILD_INTERFACE:${CM
4648
# Linker configuration
4749
target_link_libraries(${LIBRARY_TARGET_NAME} PUBLIC YARP::YARP_os YARP::YARP_sig)
4850

49-
# Specify installation targets, type and destination folders.
50-
install(TARGETS ${LIBRARY_TARGET_NAME}
51-
EXPORT ${LIBRARY_TARGET_NAME}
52-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
53-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
54-
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_TARGET_NAME}" COMPONENT dev
51+
# Install the headers explicitly to ensure they're available
52+
install(
53+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
54+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
55+
FILES_MATCHING PATTERN "*.h"
5556
)
56-
set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_TARGETS ${LIBRARY_TARGET_NAME})
5757

58-
# Install the library
59-
set(DEPENDENCIES "YARP COMPONENTS os sig")
60-
install_basic_package_files(${LIBRARY_TARGET_NAME}
61-
VERSION ${${PROJECT_NAME}_VERSION}
62-
COMPATIBILITY ExactVersion
63-
EXPORT ${LIBRARY_TARGET_NAME}
64-
NO_SET_AND_CHECK_MACRO
65-
VARS_PREFIX ${LIBRARY_TARGET_NAME}
66-
NO_CHECK_REQUIRED_COMPONENTS_MACRO
67-
DEPENDENCIES ${DEPENDENCIES})
58+
59+
# Install the targets
60+
install(TARGETS ${LIBRARY_TARGET_NAME}
61+
EXPORT ${PROJECT_NAME}Targets # Use the parent project's export name
62+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
63+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
64+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_TARGET_NAME}"
65+
)

src/ergocub_cartesian_service/include/gb-ergocub-cartesian-service/ergoCubCartesianService.h

+7-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)