Использование CMake ADD_CUSTOM_COMMAND для обработки перед компиляцией - PullRequest
2 голосов
/ 13 ноября 2011

Мой проект состоит из нескольких компонентов. Каждый из них зависит от одного или нескольких файлов *.hpp, которые генерируются из *.lcm с использованием внешнего инструмента. Я хотел бы иметь возможность указать список файлов *.lcm, необходимых для каждого компонента, и сделать так, чтобы CMake автоматически выполнял компиляцию, когда это необходимо, возможно, при помощи небольшого макроса:

REQUIRED_LCMS (the_component x.lcm z.lcm)

Для компиляции *.lcm, я думаю, должно работать следующее:

ADD_CUSTOM_COMMAND (OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${lcm_basename}.hpp
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${lcm}
                    COMMAND "lcm-gen"
                    ARGS    "--lazy --cpp ${CMAKE_CURRENT_SOURCE_DIR}/${lcm}"
                    COMMENT "  ${lcm} -> ${lcm_basename}.hpp")

... но я не уверен, что должно быть в REQUIRED_LCMS. ADD_CUSTOM_COMMAND и ADD_CUSTOM_TARGET?

1 Ответ

3 голосов
/ 13 ноября 2011

Мне удалось заставить это работать без мелкозернистой (т.е. зависимости файла на lcm), выполнив следующее:

SET (LCM_MESSAGES x.lcm
                  y.lcm
                  z.lcm)

SET (LCM_COMPILED_MESSAGES)
FOREACH (_file ${LCM_MESSAGES})

  GET_FILENAME_COMPONENT (_filewe ${_file} NAME_WE)
  STRING (TOUPPER ${_filewe} _FILEWE)
  SET (_filehpp ${_filewe}.hpp)
  SET (_filehpp_output ${CMAKE_CURRENT_BINARY_DIR}/${_filehpp})

  ADD_CUSTOM_COMMAND (OUTPUT  ${_filehpp_output}
                      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_file}
                      COMMAND lcm-gen
                      ARGS    --lazy --cpp ${CMAKE_CURRENT_SOURCE_DIR}/${_file})

  LIST (APPEND LCM_COMPILED_MESSAGES ${_filehpp_output})

ENDFOREACH ()

ADD_CUSTOM_TARGET (LCM_MESSAGES DEPENDS ${LCM_COMPILED_MESSAGES})

... и затем в CMakeLists.txt каждого компонента:

ADD_DEPENDENCIES (the_component LCM_MESSAGES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...