2011-12-31 6 views
2

PlantUMLの図をビルドプロセスの一部としてPNGに変換する簡単なCMake関数を提供しようとしています。考え方は、.umlのファイルが、ビルドプロセスの一部としてPNGにレンダリングしたいPlantUML図を含んでいることです。私はadd_library()と同様の機能を持っていたいと思います。 al。は、イメージファイルがソースファイルよりも古いダイアグラムをレンダリングします。 add_custom_command()を使用して新しいコマンドラインツール用のCMakeラッパー

、私は次のスニペットを思い付いた:

# 
# Create top-level target that renders a PlantUML diagram to a PNG image. 
# 
function(add_diagram target source) 

    # Program used to render the diagram. 
    set(plantuml java -jar ${PLANTUML_JARFILE}) 

    # Diagram source file basename used to create output file name. 
    get_filename_component(output ${source} NAME_WE) 

    # Render the diagram and write an "${output}.png" 
    # file in the current binary folder. 
    add_custom_command(
    OUTPUT 
     ${CMAKE_CURRENT_BINARY_DIR}/${output}.png 
    COMMAND 
     ${plantuml} -o ${CMAKE_CURRENT_BINARY_DIR} -tpng ${source} 
    MAIN_DEPENDENCY 
     ${source} 
    COMMENT 
     "Rendering diagram '${output}'." 
) 

    # Top-level target to build the output file. 
    add_custom_target(${target} 
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${output}.png) 

endfunction() 

そして私は、この関数を呼び出します。

foo.umlはPlantUML図を含むファイルです
add_diagram(foo ${CMAKE_CURRENT_SOURCE_DIR}/foo.uml) 

。非常に基本的なレベルでは、手動で構築できる名前付きトップレベルのターゲットを作成するという点で「機能します」(例えばmake foonmake foojom fooなどを使用)。

このターゲットをデフォルトのターゲット(all?)に追加すると、これは残りのライブラリと実行ファイルとともに自動的に構築されます。 CMake documentationから

答えて

3

add_custom_target:それは常に構築されるので、出力なしでターゲットを追加します。

ALLオプションを指定すると、このターゲットを毎回実行するようにこのターゲットをデフォルトビルドターゲットに追加する必要があることを示します。 に記載されている

依存関係は引数が同じディレクトリ(CMakeLists.txtファイル)のファイルとadd_custom_commandで作成したカスタムコマンド()の出力を参照することによって決まります。

Visual Studioを使用している場合、唯一の欠点は、ターゲットごとに新しいプロジェクトが作成されることです。

+0

ニースが見つかりました!私はそれを試して、それがどのように行くのかを教えてあげます。 –

+0

ありがとう、私がしなければならなかったのは、 'add_custom_target()'呼び出しに 'ALL'を追加することでした。全てが魅力的です! –

+0

ビルドを実行しているOSにplantumlがインストールされていない場合はどうしますか? – AlexTheo

関連する問題