首页 > 解决方案 > Make say 'doc' 是最新的,doc 文件夹为空(Makefile C++)

问题描述

当我想用 makefile 和 doxygen 生成我的文档时,我有这个输出:

make: 'doc' is up to date.

但是当文档文件夹为空时,我的文档无法保持最新​​状态!

你能说我为什么我有这个消息吗?

(makefile所在的项目,是一个C++项目)

在下面你可以找到 makefile 和 Doxyfile。

生成文件

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_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

doc文件夹打开的项目文件夹

标签: makefile

解决方案


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

doc:
        ....

当您运行make docmake 尝试查看doc目标是否是最新的。在这里,您有一个doc没有先决条件的目标,并且它存在于磁盘上(您有一个doc目录),因此 make 认为它是最新的。

如果你希望这个doc目标不引用磁盘上的实际目录,你应该像这样声明它.PHONY

.PHONY: doc
doc:
        ....

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


推荐阅读