ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

All right, here is what I did. I feel like it is tremendously hacky, but it appears to work.

I created a cmake_modules/Findtrunk.cmake file containing:

#invented based on what I found in libfreenect/cmake_modules/Findlibusb-1.0.cmake
if (TRUNK_DIR)
  # in cache already
  set(TRUNK_FOUND TRUE)
else (TRUNK_DIR)
  find_path(TRUNK_DIR
    NAMES
    rcp/Makefile
    PATHS
        $ENV{HOME}/src/hai/trunk
  )

  if (TRUNK_DIR)
    set(TRUNK_FOUND TRUE)
  endif (TRUNK_DIR)

  if (TRUNK_FOUND)
    if (NOT trunk_FIND_QUIETLY)
      message(STATUS "Found trunk:")
      message(STATUS " - ${TRUNK_DIR}")
    endif (NOT trunk_FIND_QUIETLY)
  else (TRUNK_FOUND)
    if (trunk_FIND_REQUIRED)
      message(FATAL_ERROR "Could not find trunk")
    endif (trunk_FIND_REQUIRED)
  endif (TRUNK_FOUND)

endif (TRUNK_DIR)

I added the following 2 snippets to my CMakeLists.txt file:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/")
find_package(trunk REQUIRED)

and

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${TRUNK_DIR}/common/include
  ${TRUNK_DIR}/this/that
  ${TRUNK_DIR}/the/other/thing
)
set(BBR_FILES
  ${TRUNK_DIR}/this/that/buffer.c
  ${TRUNK_DIR}/this/that/config.c
)
set_source_files_properties(${BBR_FILES} PROPERTIES LANGUAGE CXX)

add_executable(mp2ros_node
  src/mp2ros_node.cpp
  ${BBR_FILES}
)

and that seems to work. I'm not sure it's the most straightforward thing to do. I like the idea of creating a Findtrunk.cmake file so that others on my team might edit it to reflect the location of their trunk directory. We'll see if that ever comes to pass.

I would appreciate any questions, comments, or snide remarks more experienced folks would care to make regarding this approach. I'm certain that I'm not following any number of standard Cmake conventions (I noticed that other Findxxx.cmake files define INCLUDE_XXX_DIRS, for example), but this seems to work for me so far.