我正在尝试提供一个简单的 CMake 函数来将PlantUML图渲染为 PNG,作为我构建过程的一部分。这个想法是我有一堆.uml
包含 PlantUML 图的文件,我想在构建过程中将这些文件渲染为 PNG。我想要一个类似于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 foo
、nmake foo
、jom foo
等)。
如何将此目标添加到默认目标(全部?),以便自动与其余库和可执行文件一起构建?