假设'doc'是最新的,而doc文件夹为空(Makefile C ++)

时间:2019-02-22 21:23:07

标签: makefile

当我想用makefile和doxygen生成文档时,我得到以下输出:

make: 'doc' is up to date.

但是当doc文件夹为空时,我的文档无法更新!

您能说我为什么收到此消息吗?

(makefile所在的项目是C ++项目)

在下面,您可以找到makefile和Doxyfile。

MakeFile

CC = clang++
CFLAGS = -Wall -std=c++14
HDIR = include

CLASS = obj/Handyman.o obj/Saw.o obj/ScrewDriver.o obj/Hammer.o
INTERFACE = obj/ToolScrewing.o obj/ToolBreak.o obj/ToolCutting.o
ABSTRACT = obj/Tool.o
FACTORY = obj/ToolFactory.o

compile: bin/main
    ./bin/main

bin/main: obj/main.o ${CLASS} ${ABSTRACT} ${INTERFACE} ${FACTORY}
    ${CC} ${CFLAGS} -o $@ $^

obj/%.o: src/%.cpp
    ${CC} ${CFLAGS} -c -o $@ $< -I ${HDIR}

doc:
    doxygen Doxyfile

clean: 
    rm obj/*.o
    rm bin/*

cleanDoc:
    rm doc/* -rf

Doxyfile

DOXYFILE_ENCODING      = UTF-8

PROJECT_NAME           = "My ToolBox"

OUTPUT_DIRECTORY       = ./doc

INPUT                  = ./src ./include

OUTPUT_LANGUAGE        = French

MARKDOWN_SUPPORT       = YES

FILE_PATTERNS          = *.cpp \
                         *.hpp

GENERATE_HTML          = YES

EXTRACT_ALL            = YES

The folder of the project with the doc folder open

2 个答案:

答案 0 :(得分:1)

对于没有先决条件的目标,如果它存在于磁盘上,则认为它是最新的。您有一条规则:

doc:
        ....

运行make doc时,请尝试查看doc目标是否最新。在这里,您有一个没有先决条件的目标doc,它已经存在于磁盘上(您有一个doc目录),因此请考虑使用最新的目标。

如果您希望此doc目标不引用磁盘上的实际目录,则应declare it .PHONY像这样:

.PHONY: doc
doc:
        ....

现在,当您运行make doc时,make将始终运行与该目标关联的配方。

答案 1 :(得分:0)

@MadScientist的答案很好。如果要进一步改进并使其递增,可以指定文档构建的依赖性,如下所示:

doc/index.html: Doxyfile src/*.cpp include/*.hpp
    doxygen Doxyfile

.PHONY: doc
doc: doc/index.html ;

在这种情况下,如果您的任何源文件或头文件发生了更改,或者Doxyfile发生了更改,那么make会认为文档过时并进行重建。如果doc / index.html不存在,它也会构建它,例如如果“ doc”文件夹为空。

另一方面,如果您刚刚生成了“ doc / index.html”文件,并且您的源代码文件中没有任何更改,则无需执行任何操作。