Я пытаюсь предоставить простую функцию CMake для отображения PlantUML диаграмм в PNG как часть моего процесса сборки. Идея состоит в том, что у меня есть куча .uml
файлов, содержащих диаграммы PlantUML, которые я хочу рендерить в PNG как часть моего процесса сборки. Я хотел бы иметь функцию, подобную add_library()
et. al. , который отображает любую диаграмму, для которой файл изображения старше исходного файла.
Используя 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 foo
, nmake foo
, jom foo
и т. Д.).
Как добавить эту цель к цели по умолчанию (все?), Чтобы она автоматически создавалась вместе с остальными библиотеками и исполняемыми файлами?