2

ビルド プロセスの一環として、PlantUMLダイアグラムを PNGにレンダリングする単純な CMake 関数を提供しようとしています。.umlアイデアは、ビルド プロセスの一部として PNG にレンダリングしたい PlantUML ダイアグラムを含むファイルがたくさんあるということです。add_library() etに似た機能が欲しいです。アル。これは、イメージ ファイルがソース ファイルよりも古いダイアグラムをレンダリングします。

を使用add_custom_command()して、次のスニペットを思いつきました。

#
# 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()

そして、この関数を次のように呼び出します。

add_diagram(foo ${CMAKE_CURRENT_SOURCE_DIR}/foo.uml)

ここfoo.umlで、PlantUML ダイアグラムを含むファイルです。非常に基本的なレベルでは、これは手動で構築できる名前付きのトップレベル ターゲットを作成するという点で "機能" します (たとえばmake foonmake foojom foo、 などを使用)。

このターゲットをデフォルトのターゲット (すべて?) に追加して、残りのライブラリと実行可能ファイルで自動的にビルドされるようにするにはどうすればよいですか?

4

1 に答える 1

3

CMakeのドキュメントから:

add_custom_target : 出力なしでターゲットを追加して、常にビルドされるようにします。

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

DEPENDS引数でリストされた依存関係は、同じディレクトリ (CMakeLists.txt ファイル) 内の add_custom_command() で作成されたカスタム コマンドのファイルと出力を参照する場合があります。

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

于 2012-01-01T01:43:59.503 に答える