我正在编写程序文档,并希望包含屏幕截图。 CMakeLists.txt
子目录中的doc
文件如下所示:
find_program(PANDOC pandoc)
if (PANDOC)
add_custom_command(OUTPUT perfecttin.pdf MAIN_DEPENDENCY perfecttin.xml COMMAND pandoc -f docbook -o perfecttin.pdf -V papersize=a4 --data-dir=${PROJECT_SOURCE_DIR}/doc ${PROJECT_SOURCE_DIR}/doc/perfecttin.xml)
add_custom_target(perfecttin-doc ALL DEPENDS perfecttin.pdf)
endif ()
DocBook文件的部分如下所示:
<section id="window">
<title>Main Window</title>
<mediaobject>
<imageobject>
<imagedata fileref="window1.png" format="PNG"/>
</imageobject>
</mediaobject>
</section>
window1.png
与CMakeLists.txt
和perfecttin.xml
位于同一目录中。我在有和没有--data-dir=${PROJECT_SOURCE_DIR}/doc
的情况下都尝试过,但出现相同的错误:
[pandoc warning] Could not find image `window1.png', skipping...
如何告诉pandoc在哪里寻找图片?
答案 0 :(得分:1)
执行此操作的选项为--resource-path
,但在Ubuntu Bionic上的pandoc版本上不可用。因此,为了在较新版本上构建文档,但又不破坏在较旧版本上的整个构建,我添加了代码以检查pandoc是否支持该选项。这是有效的CMakeLists.txt:
find_program(PANDOC pandoc)
if (PANDOC)
execute_process(COMMAND ${PANDOC} "--resource-path=/" INPUT_FILE /dev/null ERROR_FILE /dev/null RESULT_VARIABLE pandoc_exit)
endif ()
if (PANDOC AND NOT pandoc_exit)
add_custom_command(OUTPUT perfecttin.pdf MAIN_DEPENDENCY perfecttin.xml COMMAND pandoc -f docbook -o perfecttin.pdf -V papersize=a4 --resource-path=${PROJECT_SOURCE_DIR}/doc ${PROJECT_SOURCE_DIR}/doc/perfecttin.xml)
add_custom_target(perfecttin-doc ALL DEPENDS perfecttin.pdf)
endif ()
if (PANDOC AND NOT pandoc_exit)
听起来很倒,但是成功的退出代码为0,CMake将其视为错误,而错误的代码则为2,将其视为真实。