我正在尝试提供一个简单的CMake函数,以便在构建过程中将PlantUML图表呈现给PNG。我的想法是,我有一堆包含PlantUML图表的.uml
文件,我想将其作为构建过程的一部分呈现给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
等。
如何将此目标添加到默认目标(全部?),以便使用其余库和可执行文件自动构建?
答案 0 :(得分:3)
add_custom_target :添加一个没有输出的目标,以便始终构建它。
如果指定了 ALL 选项,则表示应将此目标添加到默认构建目标,以便每次都运行该目标。
使用 DEPENDS 参数列出的依赖关系可以引用在同一目录(CMakeLists.txt文件)中使用add_custom_command()创建的自定义命令的文件和输出。
如果您使用的是Visual Studio,唯一的缺点是它会为每个目标创建一个新项目。