我正在编写一个最终将被公开发布的图书馆 - 我将它上传到Github,但可能无法在任何地方推广它 - 并希望生成文档(我已经得到了Doxygen的喜欢,所以任何想要使用它的人都知道该怎么做。另外,我发现维护文档可以帮助我跟踪程序流程和我仍然需要编写的内容,所以我想记录私有和其他内部元素,更不用说这样做会使一切更加一致。与此同时,将这些留在公共文档中只会使页面混乱,其功能和类别在开发库本身之外毫无价值。
然而,这个背景故事与我的问题完全无关:我使用cmake来管理我的Makefile,并希望创建两个自定义目标,这两个目标都需要替换文件中的变量(在此case,my Doxyfile.in
)在运行主命令之前 - 除了变量的值(并且,不太重要的是,COMMENT
的措辞),目标执行相同的操作。由于我需要在目标中设置变量,因此我需要在configure_file
内调用add_custom_target
,如果我想将其保留为单个输出,但超出代码复制,这样做会给我一个错误:
/bin/sh: configure_file: command not found
我确实让它在第一次调用cmake时使用两个单独的配置调用来处理两个单独的文件,但有没有更好的方法来编写它,或者使用多个类似的行,如下所示,实际上是最佳实践?而且,是的,我确定有人在某个地方谈论过这个问题,但我的搜索都没有发现任何相关内容。
# Usage from <https://majewsky.wordpress.com/2010/08/14/tip-of-the-day-cmake-and-doxygen/>
find_package(Doxygen)
if(DOXYGEN_FOUND)
set(CMAKE_INTERNAL_DOCS NO)
configure_file(${CMAKE_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_SOURCE_DIR}/build/Doxyfile.public @ONLY)
set(CMAKE_INTERNAL_DOCS YES)
configure_file(${CMAKE_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_SOURCE_DIR}/build/Doxyfile.dev @ONLY)
add_custom_target(doc
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/Doxyfile.public
COMMENT "Generating public API documentation with Doxygen"
VERBATIM
)
add_custom_target(doc-dev
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/Doxyfile.dev
COMMENT "Generating internal API documentation with Doxygen"
VERBATIM
)
endif(DOXYGEN_FOUND)