我想用makefile自动生成项目文档。
我还创建了一个目标文档(和一个变量DOC_DIRECTORY = ../doc
)来指定文档的目录。在我的doxygen文件中,我添加了一个日志文件名" doxyLog.log"在../doc/目录中。
这是我的目标定义:
#Creation of the Doxygen documentation
doc: $(DOC_DIRECTORY)/path_finder_doc
doxygen $(DOC_DIRECTORY)/path_finder_doc
@echo $(shell test -s ../doc/doxyLog.log; echo $$?)
ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1)
@echo "Generation of the doxygen documentation done"
else
@echo "Error during the creation of the documentation, please check $(DOC_DIRECTORY)/doxyLog.log"
endif
为了测试我的支票是否正常工作,我手动在我的文档中引入了一个错误(一个错误的命令,如\ retufjdkshrn而不是\ return)。但是,当我启动make doc
时,第二次之后会出现此错误:
首先制作doc(文档中有错误) - >完成doxygen文档的生成
第二个make doc(总是文档中的错误) - >创建文档时出错,请检查../ doc / doxyLog.log
我不明白为什么,有人可以帮助我吗?
答案 0 :(得分:2)
这里似乎有两件事是错的,所以这个答案的一部分必须是猜测。
<强>首先强>
ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1)
@echo "Generation of the doxygen documentation done"
根据我的理解test
,如果文件存在,它将返回0
,如果文件不,则返回1
。我怀疑你在将它放入你的makefile之前没有测试过。
其次,您使用 Make 命令混淆 shell 命令。这样:
ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1)
@echo "Generation of the doxygen documentation done"
else
@echo "Error..."
endif
是 Make 条件。 Make会在运行任何规则之前对其进行评估。由于日志文件尚不存在,shell
命令将返回1
(请参阅第一个),条件将评估为true并且整个if-then-else
语句将成为
@echo "Generation of the doxygen documentation done"
在执行规则之前,这将成为规则的一部分。在下一次传递中,该文件已存在,shell
命令返回0
并且该语句变为
@echo "Error..."
这解释了为什么你会得到奇怪的结果。
如果您希望Make报告其刚刚进行的尝试的结果,则必须在规则中的命令中添加 shell 条件:
doc: $(DOC_DIRECTORY)/path_finder_doc
doxygen $(DOC_DIRECTORY)/path_finder_doc
@if [ -s ../doc/doxyLog.log ]; then echo Log done; else echo error...; fi