事前コンパイル処理にCMakeのADD_CUSTOM_COMMANDを使用する

私のプロジェクトは、いくつかのコンポーネントで構成されています。それぞれは、外部ツールを使用して
*。lcm から生成される1つ以上の *。hpp
ファイルに依存します。私は、各コンポーネントに必要な *。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_COMMANDADD_CUSTOM_TARGET

ベストアンサー

私は、以下を実行することによって、きめ細かな(つまり、1cmあたりのファイルの依存関係なしに)これを動作させることができました:

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)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です