2011-11-13 4 views
2

私のプロジェクトはいくつかのコンポーネントで構成されています。それぞれは、外部ツールを使用して*.lcmから生成された1つまたは複数の*.hppファイルに依存します。のコンパイルのためプリコンパイル処理にCMakeのADD_CUSTOM_COMMANDを使用する

REQUIRED_LCMS (the_component x.lcm z.lcm) 

:私は*.lcmファイルは、おそらくちょっといいマクロを使用して、指定され、自動的に必要なコンパイルを行う各コンポーネントに必要とCMakeのを持っているかのリストを指定できるようにしたいのですが

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にどうあるべきかがわからないよ:*.lcmは、私は次のように動作するはずだと思います。 ADD_CUSTOM_COMMANDADD_CUSTOM_TARGET

答えて

3

私は次のようにして(すなわちあたり-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) 
+0

この回答は、1つのキャッチでかなり良いです。ターゲットのソースのリストにカスタムコマンドの出力を含めれば、自動的に依存関係が追加されるため、それを使用するターゲットのソースリストに$ {LCM_COMPILED_MESSAGES}を置くと、依存関係は自動的になります。カスタムターゲットとは対照的に、このアプローチの欠点は、IDEソースリストに生成されたファイルがあればそれを表示し、同じディレクトリ(同じCMakeLists.txtファイル)にする必要があるかもしれないと思います。カスタムコマンド。 –

関連する問題